首页 > 解决方案 > iOS12.1版本如何实现自动布局约束的兼容性

问题描述

我的应用程序在名为“搜索栏的容器”内有一个“搜索UIView栏”,它再次放置在导航栏下。在搜索栏之间设置Interface Builder自动布局,如下图:constraintsUIView

  1. 第一项:搜索栏。顶部关系:相等第二项:搜索栏的容器。顶部常量:0 优先级:1000 乘数:1

  2. 第一项:搜索栏。前导关系:相等第二项:搜索栏的容器。前导常量:0 优先级:1000 乘数:1

  3. 第一项:搜索栏。尾随关系:相等第二项:搜索栏的容器。尾随常量:0 优先级:1000 乘数:1

“搜索栏的容器”(UIView)设置为宽度:480 和高度:44。自动调整UIView大小设置为在所有方向上相对拉伸和定位。搜索栏也设置了宽度:480。

直到 IOS 10UIView和 Search Bar 根据设备的屏幕分辨率相对拉伸。但是对于 IOS 12.1 版本,“搜索栏”在运行时变得不可见。当我调试并检查大小时,两者UIView及其子“搜索栏”的宽度在运行时都设置为 0。删除自动布局约束后,只有搜索栏可见,但不会根据屏幕分辨率进行拉伸。

需要帮助来解决这个问题。

编辑: UIView 容器放置在导航栏内的后退/前进按钮之间。这就是 UIView 容器设置为“自动调整大小”而不是设置自动布局约束的原因。由于它位于两个按钮项之间,我认为它不能设置为其父项的前导和尾随空间限制。

标签: iosobjective-cuiviewautolayout

解决方案


“搜索栏的容器”(UIView)设置为宽度:480 和高度:44。“UIView”的自动调整大小设置为在所有方向上相对拉伸和定位。

但是它的子视图,搜索栏,使用自动布局固定在它上面。你不能像这样混合和匹配自动布局和自动调整大小。将自动布局约束应用于容器。


这似乎是您的导航项标题视图。这就解释了为什么这在 iOS 10 中有效,而在 iOS 11 中无效。标题视图现在必须使用具有内部宽度和高度约束的自动布局来赋予其大小。您将无法再动态调整其大小。


推荐阅读