我希望我可以正確描述這種情況。在屏幕上很容易看到它,但很難用言語解釋,但我會盡我所能。UISplitViewController詳細視圖不會調整旋轉大小
我有一個固定的主視圖(UITableView中)和兩個細節視圖,這取決於什麼樣細胞的法師被觸摸一個UISplitViewController。每個Detail視圖也是一個UITableView。我已經使用Apple的MultipleDetailViews示例的Todd Bates轉換爲使用故事板作爲我的代碼的基礎(Adventures in UISplitViewController)。
我使用的故事板,所以這是在說明部分得到棘手。 Master和第一個顯示的Detail視圖導航控制器在故事板中作爲與UISplitViewController的關係進行了連接。第二個詳細導航控制器只是坐在故事板中,沒有連接。
這是問題所在。細節#1在橫向模式下處於活動狀態,細節#2通過點擊主控中的一行設置爲活動狀態。 iPad旋轉至縱向模式,導致細節#2正確調整縱向模式。通過在母版中點擊一行將Detail#1設置爲激活。細節#1的尺寸與上次以橫向模式顯示時的尺寸相同,但不會像應該顯示的那樣填充屏幕。
我的問題是,我可以告訴大家,當前未顯示調整大小本身時,方向改變的細節控制器?或者一個更好的問題是如何調整剛剛顯示的Detail視圖以調整UISplitView的Detail部分?
我希望我有足夠的細節人來幫助這個描述。
的UISplitViewControllerDelegate方法是在是應該的詳細視圖控制器那些呼叫轉發經理類實現。下面是該方法的實現:
#pragma mark - UISplitViewControllerDelegate
/* forward the message to the current detail view
* all detail views must implement UISplitViewControllerDelegate
*/
-(void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc
{
self.masterBarButtonItem = barButtonItem;
self.masterPopoverController = pc;
barButtonItem.title = NSLocalizedString(@"Games", @"Games");
[self.currentDetailController.navigationItem setLeftBarButtonItem:self.masterBarButtonItem animated:YES];
}
/* forward the message to the current detail view
* all detail views must implement UISplitViewControllerDelegate
*/
-(void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
self.masterBarButtonItem = nil;
self.masterPopoverController = nil;
[self.currentDetailController.navigationItem setLeftBarButtonItem:nil animated:YES];
}
我已經實現在詳細視圖控制器中的每一個執行以下操作:
#pragma mark - Split view
- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
barButtonItem.title = NSLocalizedString(@"Games", @"Games");
[self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
self.masterPopoverController = popoverController;
}
- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
// Called when the view is shown again in the split view, invalidating the button and popover controller.
[self.navigationItem setLeftBarButtonItem:nil animated:YES];
self.masterPopoverController = nil;
}
問題是,無論是詳細視圖控制器都接收這些消息。我看不出他們的get反正觸發...
我怎麼看不到轉發didRotateFromInterfaceOrientation:會導致不從自身調整顯示的細節控制。從蘋果公司的文檔:
當一個基於iOS的設備的方向變化時,系統發出一個UIDeviceOrientationDidChangeNotification通知,讓所有利益相關方知道發生變化。默認情況下,UIKit框架攔截此通知並使用它自動更新界面方向。這意味着,除了少數例外,您根本不需要處理此通知。相反,您只需在視圖控制器類中實施適當的方法來響應方向更改。
窗口對象做多與改變當前方向相關的工作。但是,它與根視圖控制器一起工作,以確定是否應該發生方向更改,如果是,應該調用哪些其他方法來響應更改。如果這個控制器是一個容器,它可能依靠一個孩子來決定是否應該發生方向。
發生旋轉時,會在旋轉的各個階段調用視圖控制器的方法,以使視圖控制器有機會執行其他任務。您可以使用這些方法隱藏或顯示視圖,重新定位視圖或調整視圖大小,或者通知應用程序的其他部分關於方向更改。因爲您的自定義方法在循環操作期間被調用,所以您應該避免在那裏執行任何耗時的操作。您還應該避免用一組新視圖替換整個視圖層次結構。有更好的方法可以爲不同的方向提供獨特的視圖,例如呈現一個新的視圖控制器(如「創建一個替代景觀界面」中所述)。
我已經投票決定給你一個答案。我會盡力使這個工作,如果它的工作,我會標記爲答案。謝謝! – Moebius 2012-03-13 22:12:21
謝謝!如果遇到問題,請發佈您的代碼,我很樂意提供幫助。 – lnafziger 2012-03-13 22:44:21
我意識到當我看到代碼時,我應該已經在每個Detail視圖控制器中實現了UISplitViewControllerDelegate。我繼續這樣做,但Detail視圖中的協議方法未被調用。我無法發佈所有的代碼,但是還有一個Detail Manager類,它也實現了委託方法。我會在原始郵件中發佈。 – Moebius 2012-03-14 00:39:41