我有一个适用于iPad的Split View控制器,它应该支持这两种方向(纵向和横向)。
问题是当我更改设备的方向时,细节视图不会重新调整以使用整个空间,并且会出现灰色方块。
我不认为这是约束的问题,因为这只有在我旋转时才会发生:
在SplitViewController(以及DetailsController中)我尝试了这段代码:
在viewDidLoad中:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)
然后:
override func shouldAutorotate() -> Bool {
print("should rotate --> true")
return true
}
override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
print("we support all orientations")
return UIInterfaceOrientationMask.All
}
override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation {
print("preferred orientation for presentation is landscape")
return UIInterfaceOrientation.LandscapeLeft
}
func rotated(){
print("rotatiooooonn ------------")
refreshIpad()
detailSplitViewController.refreshUI()
}
func refreshIpad (){
dispatch_async(dispatch_get_main_queue(),{
self.view.setNeedsLayout()
})
}
在日志中,我得到了这个(因此无论何时发生方向变化,我都可以看到)
should rotate --> true
we support all orientations
rotatiooooonn ------------
以下是信息文件:
详细信息视图中的约束:
答案 0 :(得分:0)
在serialize(node:DOMNode, args:Object):void : Serializes the specified browser DOM node into a HTML string.
中,您需要为所有子视图显式调用refreshIpad()
,因为它不会递归发生,
setNeedsLayout()
递归解决方案(Swift 3.0)
func refreshIpad() {
dispatch_async(dispatch_get_main_queue(),{
self.view.setNeedsLayout()
for subview in self.view.subviews {
subview.setNeedsLayout()
}
})
}