ios - السيارات تغيير حجم إينافيغاتيونبار على دوران إلى أفقي




ios5 uinavigationcontroller (2)

إذا كنت تستخدم أوتولايوت، UINavigationBar 's التحديثات بشكل صحيح على دوران ولكن ارتفاعه NSContentSizeLayoutConstraint لا. الاتصال إنفالديتينرينزيكونتنتسيزي يدويا يروي أوتولايوت لتحديث قيود الارتفاع لشريط التنقل.

// View controller
public override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
  super.viewWillTransition(to: size, with: coordinator);

  self.navigationBar?.invalidateIntrinsicContentSize();
}

سلوك نافكونترولر نموذجي لتغيير حجم عندما في المنفذ / المناظر الطبيعية. من ارتفاع 44px إلى 32px أنا بيليف (من أعلى رأسي).

أنا باستخدام لوحة مصورة وشملت شريط التنقل في فك، وليس وحدة تحكم. عند الدوران بين الصورة والمناظر الطبيعية لا يتم تغيير حجم شريط التنقل تلقائيا.

لقد رأيت هذه الإجابة ولكن هذا لا يساعد: تغيير حجم إينافيغاتيونبار على دوران

شريط التنقل هو وحدة تحكم عن طريق ظهور التي يتم تحميلها في تفويض التطبيق:

UIImage *portraitImage = [UIImage imageNamed:@"mainNavBar"];
UIImage *landscapeImage = [UIImage imageNamed:@"mainNavBarLandscape"];
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone];

[[UINavigationBar appearance] setBackgroundColor:[UIColor blackColor]];
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                       [UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], UITextAttributeTextColor,
                                                       [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5],UITextAttributeTextShadowColor,
                                                       [NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
                                                       UITextAttributeTextShadowOffset,nil]];

[[UINavigationBar appearance] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin];

للأسف الجزء الأخير لا فرق ولا شريط الملاحة سيتم تضمينها في وحدات تحكم متعددة لا أريد أن أكرر نفس رمز الغراء في السؤال أعلاه الإجابة على جميع فكس بلدي لتغيير حجم على دوران.


عملت الإجابة المقبولة بالنسبة لي، ولكن أردت الانتقال إلى تخطيط قائم على القيد الكامل.

وضع UIBarPosition على مندوب UINavBar وضع الأشياء حسب الحاجة. تذكر إرفاق المندوب في البكالوريا الدولية (بطبيعة الحال).

// In my view controller

#pragma mark - UIBarPositioningDelegate
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
    return UIBarPositionTopAttached;
}

للقيود على UINavBar في يب:

  • أعلى الفضاء إلى: أعلى دليل تخطيط (0)
  • الرائدة في الفضاء إلى: سوبيرفيو (0)
  • تدريب الفضاء إلى: سوبيرفيو (0)
  • الأهم .... لا قيود القيد من أي نوع! -

سيتم تحديد الارتفاع حسب حجم المحتوى في وقت التشغيل. في الأصل لم أستطع الحصول على هذا العمل بشكل صحيح لأنني كان عمودي المحتوى تعانق الأولوية في 750، ولكن هذا كان خطأ. عندما غيرت مرة أخرى إلى الافتراضي (250) أنها عملت بشكل جيد.







uinavigationitem