العنوان المخصص على uinavigationscontroller هو متحرك بشكل غير صحيح
-
02-10-2019 - |
سؤال
ربما أفعل شيئًا خاطئًا هنا لأن هذا يبدو غبيًا بعض الشيء.
أقوم بإعداد TitleView مخصص (في شكل Uilabel) على uinavigationController الخاص بي هو نفسه في كل صفحة. لتسهيل ذلك ، قمت بإنشاء وظيفة في مندوب التطبيق الخاص بي لعرض التسمية بشكل صحيح. ثم أسمي هذه الوظيفة على أي وجهات نظر فرعية مباشرة بعد دفعها إلى مكدس التنقل.
إليك الرمز (الذي ربما يكون أكثر منطقية من توضيحي):
//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
UILabel *label = [[UILabel alloc] init];
// set up label attributes
// ...
[label sizeToFit]; //without this line my label won't show at all
[navController.navigationBar.topItem setTitleView:label];
[label release];
}
// In SomeViewController.m, when pushing another controller onto the stack:
UIViewController *otherViewController = //initialize other view controller;
[self.navigationController pushViewController:otherViewController animated:YES];
[(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];
مشكلتي هي أنه عندما أدفع وحدة تحكم العرض التالية على المكدس ، وتنزلق وحدة التحكم الجديدة بسلاسة ، طوال مدة الرسوم المتحركة ، تتمسك الملصق إلى أعلى اليسار قبل أن تتصاعد أخيرًا بعد الانتهاء من الرسوم المتحركة. يبدو غريبا وقبيحا حقا. كيف يمكنني إعداد الملصق بشكل صحيح بحيث ينزلق من العرض التالي بسلاسة؟ بالتأكيد شيء بسيط أفتقده ...
المحلول 2
ما انتهى بي الأمر هو استخدام صورة مع النص المدرج على أنه الخلفي للرأس ، لذا بدلاً من الرسوم بسلاسة كما أردت في الأصل ، فإنه لا يتم تحريكه على الإطلاق.
بالنظر إلى أنه نفس الشيء الذي يتجه في كل مكان ، فهي ليست صفقة كبيرة.
نصائح أخرى
إجابة متأخرة جدًا على هذا السؤال ، لكنني واجهت نفس المشكلة ووجدت طريقة أخرى لحلها ، دون استخدام صورة. اعتقدت أنني سأشارك الحل لأنه قد يساعد شخص ما.
في حالتي ، أقوم بتعيين uilabel مخصص ليكون TitleView ، وأدركت أنه فقط عندما أقوم بتعيين خاصية TitleView في طريقة ViewDidload ، فإنها تحفز بشكل صحيح. ومع ذلك ، في بعض الحالات ، لم أكن أعرف العنوان حتى الآن في جهاز ViewDidload (في بعض الحالات ، كنت بحاجة إلى استخدام عنوان من طلب HTTP على سبيل المثال). لذلك ، كان حل هذه الحالات هو تعيين خاصية TitleView على CustomLabel مع Text @"" في ViewDidload ، وكلما حصلت على العنوان الحقيقي ، قمت فقط بتغيير خاصية النصوص الخاصة بي المخصصة.
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
//set temporary title, the MBMUINavigationBarTitleView is a UIView subclass whose viewWithTitle method returns an autoreleased UIlabel with my custom settings, custom font etc.
self.navigationItem.titleView = [MBMUINavigationBarTitleView viewWithTitle:@" "];
}
//somewhere later, when I have the real title
UILabel* titleLabel = (UILabel*)self.navigationItem.titleView;
[titleLabel setText:theRealTitle];
كنت في موقف مماثل لـ YLVA ، باستخدام مثيل لفئة نصية مخصصة لـ UINavigationItem's
titleView
منشأه. ومع ذلك ، وجدت تكوينه في viewDidLoad
لم يحل خلل الرسوم المتحركة.
كان الحل المتكرر للمشكلة هو الانتظار حتى يتم عرض وحدة التحكم في العرض المعنية UINavigationItem's
العادة titleView
لذلك لا يحتاج أبدًا إلى الحصول على الرسوم المتحركة على الإطلاق.
عندما بلدي UINavigationController
الفئة الفرعية تتلقى popViewControllerAnimated:
الرسالة ، أقوم بنسخ نص العنوان من حقل النص المخصص الخاص بي (UINavigationItem's
titleView
) داخل ال UINavigationItem's
title
الممتلكات وتعيين titleView
خاصية لا شيء. ثم UINavigationController
المضي قدمًا وينبثق من وحدة التحكم في العرض وفقط علامة عنوان شريط التنقل القياسي هي متحركة (وليس عنقوتي المخصصة) ، خالية من خلل.