سؤال

هذه هي صورة:

alt text

هذا هو المناظر الطبيعية

alt text

لقد جربت هذا على الدوران دون نجاح:

self.tableView.autoresizesSubviews = YES;
self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
هل كانت مفيدة؟

المحلول

ركضت في هذه المشكلة مؤخرا. في حالتي، كان لأنني كنت أداء تناوب لوحدة تحكم الملاحة التي لم تكن وحدة تحكم الجذر لإطار التطبيق. لذلك، كنت أستخدم نهج ضبط إشعار التدوير / تحويل / حدود فك التشفير إلى تغيير تخطيط وحدة تحكم الملاحة. هذا عمل كل الحق ولكن أنتجت النتائج الموضحة هنا. استغرق الأمر مني بعض الوقت أن يلاحظ أنه عندما استدارة إلى المناظر الطبيعية لم يتم تغيير حجم ارتفاع شريط NAV بشكل صحيح (أي، من 44 إلى 32 بكسل، ارتفاع الإطار المخفض لوضع المناظر الطبيعية). وحدة تحكم الرؤية الجذر للتطبيق الخاص بي كنت الاستجابة ل willrotatetointerfaceoration. و didrotatefrominterfaceoration., ، ومع ذلك. تعلم وحدة التحكم هذه الموجودة بالفعل حول وحدة تحكم التنقل المرتبطة به. سمعت المشكلة عن طريق إضافة التعليمة البرمجية التالية إلى willrotatetointerfaceoration. طريقة:

CGRect frame = self.navViewController.navigationBar.frame;
if (toInterfaceOrientation == UIInterfaceOrientationPortrait || toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    frame.size.height = 44;
} else {
    frame.size.height = 32;
}
self.navViewController.navigationBar.frame = frame;

آمل أن يحفظ هذا شخص ما بعض الوقت في وضع مماثل.

نصائح أخرى

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

– willRotateToInterfaceOrientation:duration:

– willAnimateRotationToInterfaceOrientation:duration:

– didRotateFromInterfaceOrientation:

– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:

– didAnimateFirstHalfOfRotationToInterfaceOrientation:

– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

لذلك في حالة وحدة تحكم الملاحة، تدار بواسطة وحدة تحكم الجذر المخصصة الخاصة بك، وإعادة توجيه – willAnimateRotationToInterfaceOrientation:duration: إلى وحدة تحكم التنقل بإصلاح المشكلة مع ارتفاع شريط التنقل الخطأ عند الدوران.

أضف السطر التالي في طريقة DidrotateTefrominterFaceorientation.

self.now.navcontroller.view layoutsubviews]؛

آمل أن يفعل هذا.

لدي نفس المشكلة بالضبط، و jstevenco قادني إلى حل غريب حقا. تعزز آرائي أيضا تلقائيا بالتناوب، ولكن يبدو أن الجدول الافتراضي لا يفهم أن هناك A NavigationController يجلس هناك:

ضمن TableViewController، أضف ما يلي:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
 CGRect frame = navBar.frame;
if (fromInterfaceOrientation == UIInterfaceOrientationPortrait || fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    frame.size.height = 31.9;
} else {
    frame.size.height = 44.1;
}
navBar.frame = frame;  

}

31.9 و 44.1 مهمة للغاية غريبة! ترك هذه هي 32 و 44، لا يوجد تغيير حجم القيام به، لذلك يبدو أن تجاهلها. عملت بالنسبة لي، آمل أن يساعد شخصا آخر.

يبدو أن عرض الجدول يتم تمرير أسفل قليلا بعد تغيير الاتجاه.

هل حاولت الاتصال scrollToRowAtIndexPath:atScrollPosition:animated: والتمرير إلى أعلى الصف الأكثر؟

يمكن أن تحدث هذه المشكلة إذا قمت بتسميتها "WillanImaterotationTointerFaceorationation:" في وحدة تحكم التنقل الخاصة بك، ولكن نسيت الاتصال فائقة من داخل الطريقة.

يجب أن يكون لديك شيء من هذا القبيل:

        - (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
        [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation];
// Your code here

    }

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

لك UINavigationController يحتاج إلى الحصول على إخطار عند تغيير اتجاه الجهاز. هذا لا يحدث إذا أضفت فقط view من أ UINavigationController إلى آخر UIView.

بدءا من iOS 5، يمكنك ببساطة الاتصال addChildViewController: على الوالد UIViewController, ، من شأنه أن يضمن نشر تغييرات التوجيه إلى وحدة تحكم عرض الأطفال هذه.

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