Swift 3:Popover ViewController中的UISearchBar显示的宽度超出预期(在iPad上)
我有一个从Popover segue打开的视图控制器-在iPhone上显示它作为一个完整的页面视图控制器打开(基本上是模态的)。在iPad上,它以popover的形式打开 在iPad上打开视图时,seachbar会呈现比Popor视图更宽的视图。这在任何iPhone屏幕尺寸上都不会发生——只有iPad(作为Popover) 如果我将UISearchBar调到焦点位置(点击文本字段),问题将自行解决,直到再次打开视图: UISearchBar以编程方式添加到所需尺寸的UIView中 下面是初始化SearchController的代码Swift 3:Popover ViewController中的UISearchBar显示的宽度超出预期(在iPad上),swift,uitableview,ipad,swift3,uisearchbar,Swift,Uitableview,Ipad,Swift3,Uisearchbar,我有一个从Popover segue打开的视图控制器-在iPhone上显示它作为一个完整的页面视图控制器打开(基本上是模态的)。在iPad上,它以popover的形式打开 在iPad上打开视图时,seachbar会呈现比Popor视图更宽的视图。这在任何iPhone屏幕尺寸上都不会发生——只有iPad(作为Popover) 如果我将UISearchBar调到焦点位置(点击文本字段),问题将自行解决,直到再次打开视图: UISearchBar以编程方式添加到所需尺寸的UIView中 下面是
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.layoutifneed()。这两者都没有任何效果
我可以通过在viewDidLoad中激活UISearchBar来解决这个问题,但我正在寻找一个不那么麻烦的解决方案
谢谢 这是调试UI问题的有趣一课 我相信这最终是由于ViewController被设置为“推断大小”和“固定大小”所致。在不同尺寸的iPad屏幕上(9.7英寸vs 12.9英寸) 为了解决这个问题,我将搜索栏的框架宽度设置为它下面的tableview。我不知道为什么searchbarview的大小会改变宽度,因为它被限制在前缘和后缘(superview) 虽然这是可行的,但如果使用分割视图(用于popover有显示空间的宽度),则存在相同的问题 欢迎提出进一步建议,但这是一个良好的开端 ---编辑--- 在ViewController的layout下取消选中“从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中缺少一个设置
if UIDevice.current.userInterfaceIdiom == .pad {
self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: 375, height: 44)
}