سؤال

وأواجه مشكلة غريبة مع إضافة UINavigationController إلى بلدي تطبيق اي فون. I إضافة وحدة تحكم كما يلي:

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];

myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];

UIView *finalView = myeNavigationViewController.view;

[self.view addSubview:finalView];

وجميع ما يبدو للعمل كما هو مخطط لها إلا أحصل على المساحة البيضاء غريب في الجزء العلوي من وجهة نظري بين شريط الحالة وشريط العنوان UINavigationController. نص بديل http://www.andrewskinner.name/problem.png

ولقد بحثت على الانترنت ولكن لا أعرف حقا ما يجب البحث عنه. وقد أي شخص آخر لهذه المشكلة؟ يمكنك لي نقطة في اتجاه بعض المساعدة؟

وشكرا مقدما.

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

المحلول

وراجع الأجوبة في هذا السؤال:

لا يدري لماذا يتم حثت UIView صعودا بنحو 10px

نصائح أخرى

وماذا يفعل سطر

UIView *finalView = myeNavigationViewController.view;

وإضافة إلى رمز؟ انها زائدة عن الحاجة كما يمكنك إضافة وجهة النظر مباشرة دون تعيينه إلى UIView أولا - بالإضافة إلى أنه غير صحيح لأنه يرجع myNavigationController وليس navigationController ..
أنا أميل إلى القيام بذلك

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];    
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];

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

والمسألة هي أن UINavigationController مثالي ينبغي أن يكون subView مباشرة من UIWindow. وسوف موقف والحق حجم في حد ذاته. عند إضافة UINavigationController في طريقة عرض مخصصة آخر من subview UIWindow، تحتاج لرعاية من موضع وحجم هذا العرض المخصصة مع الأخذ في الاعتبار ما إذا كان يتم عرض شريط الحالة أم لا في UIWindow.

واقتراحي هو جعل طريقة العرض المخصصة كما فئة فرعية من UINavigationController:

mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];

[myUIWindow addSubview:nav.view];

ووداخل mySubClass_NavigationController، يمكنك أن تفعل كل التخصيص الذي تقومون به الآن في نفسك (أيا كان أن وحدة التحكم هو).

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

وقعت مشكلتي عند إضافة UINavigationController كطريقة عرض في UITabController. وقد تسبب في الفضاء في حالتي من قبل جزء UINavigationBar من UINavigationController مع الأخذ بعين الاعتبار شريط الحالة وأنها متداخلة في الواقع جزء من الرأي القائل بأن كنت أحاول أن تظهر في UINavigationController.

وهذا هو رمز انتهى بي الأمر مع في loadView في بلدي واحد من وحدات التحكم عرض UITabBarController.

SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];

UINavigationController *navController = [[UINavigationController alloc]
                                         initWithRootViewController:screenList];

CGRect frame = [[navController navigationBar] frame];

frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.

[[navController navigationBar] setFrame:frame];

[self setView:[navController view]];

وهناك بعض مزيد من المعلومات في http://discussions.apple.com/message.jspa ؟ messageID = 7890362 .

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

وربما كنت قد حصلت بطريقة أو بأخرى نفسك اثنين UIViews، مع كل شريط الحالة. تحقق من xib.

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