2015-02-11 57 views
11

我們有一個帶有tableView的MainViewController,它提供了一個新的modalViewController。iOS8 - 防止旋轉呈現viewController

MainViewController僅限於肖像,並且modalViewController可以旋轉。

的問題是在iOS8上,當modalViewController旋轉,在iOS8上的MainViewcontroller旋轉回調方法被調用 - - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

因此,UITableView的是得到它重新載入數據,這是我們不」行爲不想要。

我們是否可以阻止iOS 8的這個功能,而不是旋轉呈現UIViewController?

+0

是否在iOS7上調用回調?因爲根據[文檔](https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIContentContainer_Ref/index.html#//apple_ref/occ/intfm/UIContentContainer/viewWillTransitionToSize:withTransitionCoordinator: )它是在iOS8上推出的 – Leonardo 2015-02-11 11:20:16

+0

@Leonardo在iOS7中一切都很好,這確實是iOS8的一個功能,我不想要... – oren 2015-02-11 13:15:29

+0

重寫它並使其無效 – Leonardo 2015-02-11 13:17:45

回答

11

因此經過漫長的搜索和調查,我終於想出了一個可能的解決方案。

首先,我可以使用導航控制器,並推動viewController而不是呈現它,但它打破了我的代碼,只是不是如此。

我能做的第二件事就是不設置約束。我仍然可以使用autolayout,但是如果我不設置約束,並且設置默認約束,那麼tableView不會被重新加載。當然這也是不是很聰明的事情,因爲我在我的viewController中有很多元素。

最後,我發現我可以在另一個UIWindow中顯示這個「模態」viewController。我創建UIWindow並將modalViewController設置爲其rootViewController。

我把一些示例項目的git: https://github.com/OrenRosen/ModalInWindow

希望這會有所幫助。

+0

完美!這正是我所尋找的 – 2015-02-26 13:06:16

+0

這就是我一直在努力尋找和尋找的東西。非常感謝你@oren – 2015-03-04 15:50:21

+0

@oren我也有這個問題在iOS 9上。解決方法是檢查presentsViewController – onmyway133 2016-09-06 09:42:54

0

我用導航控制器做了一件similar,除非頂部推動的控制器旋轉,否則它不會旋轉。

你的情況檢查主控制器是否提供另一個控制器。如果不是,則拒絕旋轉,否則返回呈現的控制器爲旋轉方法返回的任何內容。

至於你的表格視圖,由於旋轉,它不應該得到重新加載

+0

我需要以模態方式呈現viewController,而不是推送viewController,我已經知道在推送viewController時它不會旋轉,請在發佈問題之前閱讀註釋和其他答案。當在iOS8中進行模態呈現時,當呈現的viewController旋轉時,所有屏幕旋轉並且它也影響presentsViewController。無論如何感謝 – oren 2015-02-26 12:11:04

+0

我看過這個問題,並且知道你想要展示,而不是推動。我剛剛給了你一個推送控制器的例子,這個控制器也可以用於現有的控制器。 – Rivera 2015-02-27 12:49:28

+0

謝謝,我很感激。但我嘗試了所有可能的解決方案,並且不適合我。它看起來像呈現viewController不旋轉,但它的確會改變它的視圖大小。無論如何,我用一個額外的UIWindow解決了它。同時它就像一個魅力,但我仍然等待一些意想不到的行爲...... :) – oren 2015-02-27 13:04:25

0

在iOS 8中,當您更改設備方向時旋轉的視圖是添加到UIWindow的第一個視圖。因此,如果您在presentedController中保存了對其的引用,則可以覆蓋shouldAutorotatesupportedInterfaceOrientations值。