إيفيو أدسوبفيو بعد تغيير الاتجاه:أخبر عرض لتغيير الحجم

StackOverflow https://stackoverflow.com/questions/5995617

سؤال

لدي إيفيو كما زيب في وضع عمودي.

تتم إضافة هذا العرض برمجيا إلى فيوكونترولر مثل هذا:

NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"InputView" owner:self options:nil];
    InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
    [self.view addSubview:inputView];

يحتوي هذا العرض على أقنعة الحجم التلقائي التي تم إعدادها بشكل صحيح وتدور بشكل جيد عندما يتغير الاتجاه من عمودي إلى أفقي.

ومع ذلك ، إذا كان الاتجاه هو بالفعل المناظر الطبيعية وأنا خلق الرأي بعد تغيير الاتجاه ، له اتجاهه الرأسي الأولي.

هل هناك طريقة لإخبار العرض بتهيئة أو تغيير حجم نفسه إلى صورة باستخدام أقنعته?

شكرا مقدما على أي رد!

تحرير:باستخدام اقتراحات أوكولوس وإندر كومار راثور (شكرا يا شباب!) ، لقد غيرت الكود إلى هذا:

InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
[self.view setNeedsLayout];
[self.view layoutSubviews];
[self.view layoutIfNeeded];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
[self shouldAutorotateToInterfaceOrientation:orientation];

لسوء الحظ ، لا يوجد تغيير على الإطلاق.أعتقد أنني وجدت شخصا يسأل نفس السؤال:

عند إضافة عرض فرعي ، لا يتم تغيير حجم العرض إذا كان التطبيق في الوضع الأفقي

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

تحرير 2:

حل إيدز يعمل:

InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
inputView.frame = self.view.bounds;
[inputView show];

شكراً!

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

المحلول

في كثير من الأحيان ملف بنك الاستثمار القومي/زيب يحتوي على UIViewController هذا يعتني بكل هذا.في هذه الحالة ، منذ هم لا تحكم عرض (في بنك الاستثمار القومي/زيب) تحتاج إلى تولي واجبات ما بعد التحميل.

الاتصال layoutSubviews بشكل مباشر أو غير مباشر عبر setNeedsLayout أو layoutIfNeeded لن تفعل الكثير من الخير لأن التنفيذ الافتراضي لا يفعل شيئا.

على افتراض أنك تريد عرض الإدخال لملء حدود الذات.عرض يمكنك القيام بما يلي:

InputView *inputView = (InputView*)[nibObjects objectAtIndex:0];
[self.view addSubview:inputView];
inputView.frame = self.view.bounds;
[inputView show];

جميع أقنعة تغيير حجم المشاهدات الفرعية يجب يتم تعيين بشكل صحيح لهذا العمل ، ومن الواضح ، إذا كنت لا ترغب في ملء الحدود الكاملة قد ترغب في ضبط الإطار.

نصائح أخرى

giveacodicetagpre.

هذا يعمل بالنسبة لي (Y)

لا أعرف ما إذا كان لا يزال لديك هذه المشكلة.

لنفترض أن لديك البنية التالية:

  • نافذة
    • سوبفيوكونترولر

(قمت بتنفيذ يجب أن يكون صحيحا للإجابة على التوجهات المطلوبة)

في هذا سوبفيوكونترولر تريد إضافة وجهات نظر إيفيوكونترولر جديدة عن طريق استدعاء فقط addSubview وظيفة.

بدلا من تنفيذ التلاعب الحدود في شولدوتوروتات ، يجب تنفيذه في

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
  self.newUIViewController.view.frame = self.view.bounds;
}

didRotateFromInterface...يسمى بعد shouldRotate.في هذه الوظيفة ، يتم إعداد الحدود بالفعل بشكل صحيح.

بهذه الطريقة لا تحتاج إلى الكثير من التلاعب بالكود.

انظر هذا السؤال ذات الصلة:

متى تصبح الأقنعة التلقائية نافذة المفعول في دائرة الرقابة الداخلية?

لذلك بعد تحميل طريقة العرض الجديدة من المنقار ، وإضافة عرض فرعي إلى self.view, ، حاول الاتصال setNeedsLayout.

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