سؤال

لدي شريط NAV في تطبيق iPhone مع uibarbuttonitems مخصصة:

UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
       initWithImage:[UIImage imageNamed:@"homePerson.png"]
               style:UIBarButtonItemStylePlain
              target:self action:@selector(showHomePerson)];

HomePerson.png هو 20 × 18.

يبدو جيدًا في وضع الصورة ، ولكن في وضع المناظر الطبيعية ، تكون صورة 20x18 على الزر طويلًا جدًا بحيث لا تبدو لطيفة. يبدو أن iOS يقوم ببعض الأعمال على أزرارها القياسية لتقليص الصورة حسب الحاجة عندما تكون في شريط NAV أرق.

ما هي أفضل طريقة للتعامل مع هذا؟

مثال آخر هو عندما يكون لدي زر مخصص في TitleView من شريط NAV. أحتاجه للتقلص أيضًا عندما يدور التطبيق.

شكرا مقدما على أي مؤشرات يمكنك أن تعطيني!

هل كانت مفيدة؟

المحلول

يبلغ حجم شريط الأدوات وصورة شريط التنقل 20 × 20 ، لذلك عندما تقدم صورة لا تلبي تلك الأبعاد التي تتركها إلى الإطار لتغيير حجم/توسيع صورتك التي تسبب مشكلتك. تغيير حجم/توسيع صورتك إلى 20x20 وينبغي أن تبدو صورتك صحيحة في كل من الصورة والمناظر الطبيعية.

نصائح أخرى

ذكر Steipete هذا في التعليقات ولكني أشعر أنه يجب أن يكون إجابة الآن. اعتبارًا من iOS 5 ، يمكنك استخدام uibarbuttonitem ectionizer:

- initWithImage:landscapeImagePhone:style:target:action:

فقط ضبط landscapeImagePhone صورة لإصدار أصغر من الصورة التي تريد تغيير حجمها في المناظر الطبيعية.

بعد بعض الاختبارات ، لاحظت أن iPhone يقلل من شريط التنقل ، وبالتالي فإن uibarbuttonitems على شريط التنقل ولكن iPhone 6 Plus لا. يبدو أن 6 Plus يحافظ على شريط التنقل على ارتفاع 44 بكسل ، في حين أن iPhone العادي يقلل من 32 بكسل. بسبب هذا ، 6 زائد أيضا لا استخدم ال landscapeImagePhone في المناظر الطبيعية.

لقد اختبرت هذا من خلال عدم استخدام صورة أصغر حجمًا فقط landscapeImagePhone, ، ولكن صورة مختلفة تماما. الصورة لم تتغير أبدا على 6 زائد.


ومع ذلك ، كن على دراية بما يلي اعتبارًا من iOS 9.2 على iPhone 6 Plus:

ال وثائق Apple لهذا المُهيئ ينص علي landscapeImagePhone هو:

الصورة المراد استخدامها للعنصر في أشرطة المناظر الطبيعية في تعبير UiuserInterfaceIdiomphone.

اعتبارًا من نظام التشغيل iOS 9.2 ، يبلغ 6 زائد تقريرًا كما UIUserInterfaceIdiomPhone في كل من الصورة والمناظر الطبيعية. من قبل ، اعتاد 6 زائد ليكون UIUserInterfaceIdiomUnspecified. لست متأكدًا تمامًا عندما تم تحديث ذلك. ولكن ، لأنه الآن UIUserInterfaceIdiomPhone, ، وفقا للوثائق ، landscapeImagePhone يجب أن تنطبق على 6 زائد كذلك.

لذلك ربما لا يعتمد كثيرًا على UiuserInterfaceidiom بقدر ما هو الحال على ارتفاع شريط التنقل. أنا لا أعرف بالتأكيد. فقط لاحظ أن هذا التناقض قد يكون "ثابتًا" في المستقبل وبالتالي يسبب سلوكًا مختلفًا.

لدي قضية مماثلة. الآن يمكنني استخدام الزر المخصص إلى الزر. على سبيل المثال ، هنا كتالوج uibarbuttonitem. يمكنك استخدامه لإنشاء زر شريط مخصص.

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage *)highlightedImage     target:(id)target action:(SEL)action{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return barItem;
}

ثم يمكنك ضبط إطار عرض زر الشريط المخصص عند الدوران.

تلميح:

  1. في طريقة الدوران ، على سبيل المثالwillAnimateRotationToInterfaceOrientation, ، قم بطباعة إطار العرض المخصص لعناصر زر شريط التنقل .. ، واحصل على الإطار الصحيح (في وضع النتوء) الذي تريده أيضًا ، يمكنك أيضًا رؤية الإطار غير صحيح في وضع المناظر الطبيعية ، نحتاج إلى إصلاحه.
  2. إصلاح مشكلة إطار زر شريط المناظر الطبيعية من خلال الرجوع إلى القيمة الإطار الصحيحة.

في حالتي ، أنا مجرد إصلاح أصل العرض المخصص ... على سبيل المثال

// adjust the navigation Item top, otherwise it is not proper set after rotation
_centralRootViewController.navigationItem.leftBarButtonItem.customView.top = 5;
_centralRootViewController.navigationItem.rightBarButtonItem.customView.top = 5;

ملاحظة: الأعلى هو y من الإطار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top