【问题标题】:How to achieve compatibility regarding auto layout constraints for iOS12.1 versioniOS12.1版本如何实现自动布局约束的兼容性
【发布时间】:2019-09-25 05:12:48
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: ios objective-c uiview autolayout


    【解决方案1】:

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

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


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

    【讨论】:

    • 我在帖子的“编辑”标题下添加了更多信息,说明我必须对容器使用自动调整大小的原因。
    • 我坚持我的回答。您使用自动调整大小所做的一切都可以通过自动布局来实现。 “由于它位于两个按钮项之间,我认为它不能设置为其父项的前导和尾随空间限制。”我认为可以。
    • 我删除了 UIView 容器上的自动调整大小,但它没有在运行时显示。然后我尝试通过控制单击 UIView 并拖动到导航栏,在 UIView 容器上相对于“界面构建器”上的导航栏添加自动布局约束。但导航栏突出显示。我不明白为什么我无法在 UIView 和导航栏之间添加自动布局约束
    • 没有导航栏。使用安全区域。
    • 我没有得到。你能解释清楚吗?我的应用程序设计有一个 UINavigationBar 和用作搜索栏容器的 UIView 仅放置在 UINavigationBar 内。
    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多