我有一个从Popover segue打开的视图控制器 - 在iPhone显示器上打开它作为整页视图控制器(基本上是模态)。在iPad上,它作为一个弹出窗口打开。
在iPad上打开视图时,seachbar呈现比弹出窗口更宽的视图。任何iPhone屏幕尺寸都不会出现这种情况 - 只有iPad(作为Popover)。
如果我将UISearchBar置于焦点(点击文本字段),问题将自行解决,直到再次打开视图:
UISearchBar以编程方式添加到所需尺寸的UIView中。
以下是初始化SearchController的代码
self.resultSearchController = ({
let controller = UISearchController(searchResultsController: nil)
controller.searchResultsUpdater = self
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
controller.definesPresentationContext = false;
searchBarView.addSubview(controller.searchBar)
return controller
})()
我尝试删除.sizeToFit(),而是根据CGSize调整大小
controller.searchBar.sizeThatFits(CGSize(width: 375, height: 44)
然而,这不起作用。我也试过调用view.setNeedsLayout()和view.LayoutIfNeeded()。这些都没有任何影响。
我可以通过在ViewDidLoad中激活UISearchBar来解决这个问题,但我正在寻找一个不那么笨拙的解决方案。
谢谢!
答案 0 :(得分:0)
这是调试UI问题的一个有趣课程。
我认为这最终是由ViewController设置为大小推断和大小修复引起的。在不同的iPad屏幕尺寸上(9.7“对比12.9”)。
要解决此问题,我将搜索栏的框架宽度设置为其下方的tableview。我不确定为什么搜索栏视图大小会改变宽度,因为它受限于前导和后缘(superview)。
if UIDevice.current.userInterfaceIdiom == .pad {
self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: Int(tableView.frame.width), height: 44)
}
虽然这有效但如果使用分割视图(对于弹出窗口有空间显示的宽度),它也有同样的问题。
欢迎提供进一步的建议,但这是一个良好的开端。
--- ---编辑
取消选中ViewController布局下的“从NIB调整视图大小”以及将大小设置为Freeform并声明恒定宽度解决了在iPad上调整VC大小的问题。从那里我只需在viewDidLoad中设置搜索栏的框架,如下所示:
if UIDevice.current.userInterfaceIdiom == .pad {
self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: 375, height: 44)
}
无论是否分割视图,似乎都适用于所有设备。如果不检测iPad,可能有更好的方法。我想我在Interface Builder中缺少一个设置。