gpt4 book ai didi

swift 3 : UISearchBar in Popover ViewController shows up wider than expected (on iPad)

转载 作者:行者123 更新时间:2023-11-30 12:41:56 29 4
gpt4 key购买 nike

我有一个从 Popover segue 打开的 View Controller - 在 iPhone 显示器上,它作为一个完整的页面 View Controller 打开(基本上是模态的)。在 iPad 上,它以弹出窗口的形式打开。

在 iPad 上打开 View 时,搜索栏呈现的宽度比弹出窗口的 View 宽。这种情况不会发生在任何 iPhone 屏幕尺寸上 - 只有 iPad(作为 Popover)。

iPad Popover View

如果我将 UISearchBar 置于焦点(点击文本字段),问题会自行解决,直到再次打开 View :

iPad SearchBar in Focus

iPad SearchBar after Focus

UISearchBar 以编程方式添加到所需尺寸的 UIView。

SearchBarView

这是初始化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 来解决这个问题,但我正在寻找一个不那么糟糕的解决方案。

谢谢!

最佳答案

这是调试 UI 问题的一个有趣的类(class)。

我相信这最终是由 ViewController 设置为推断大小和固定大小引起的。在不同的 iPad 屏幕尺寸上(9.7 英寸与 12.9 英寸)。

为了解决这个问题,我将搜索栏的框架宽度设置为其下方的表格 View 。我不确定为什么 searchbarview 大小改变了宽度,因为它受到前缘和后缘( super View )的限制。

        if UIDevice.current.userInterfaceIdiom == .pad {
self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: Int(tableView.frame.width), height: 44)
}

尽管这有效,但如果使用分割 View (对于弹出窗口有空间显示的宽度),它也会出现相同的问题。

欢迎提出进一步的建议,但这是一个好的开始。

---编辑---

在 ViewController 的布局下取消选中“Resize View from NIB”,并将大小设置为 Freeform 并声明恒定宽度解决了 VC 在 iPad 上调整大小的问题。从那里我只需在 viewDidLoad 中设置搜索栏的框架,如下所示:

    if UIDevice.current.userInterfaceIdiom == .pad {
self.resultSearchController.searchBar.frame = CGRect(x: 0, y: 0, width: 375, height: 44)
}

似乎适用于所有设备,无论是否 Split View。可能有更好的方法可以在不检测 iPad 的情况下执行此操作。我想我缺少 Interface Builder 中的一个设置。

关于 swift 3 : UISearchBar in Popover ViewController shows up wider than expected (on iPad),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42128203/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com