interface-builder - 如何在 UINavigationBar 自定义 titleView 中使用自动布局

标签 interface-builder swift4 xcode9

WWDC 2017 presentation 204他们说您可以在自定义 titleView 中使用自动布局。

它发生在 7:53 左右

wwdc-pic

他们从不展示如何做到这一点的例子。

当我尝试时,我得到一个零尺寸的 View 。

在界面生成器中,我创建了一个 UIView 并添加了一个 UISearchBar 和一个 UIButton 像这样

[seachBar]-[按钮]

它变成零宽度。

有谁知道如何使用这个新功能?

最佳答案

我会回答我自己的问题。

本质上,自动布局的工作方式与您期望的一样。然而,问题在于每个元素要么需要有约束来指定其宽度,要么需要指定其固有大小。例如,如果您将搜索栏替换为 uilabel,则自定义标题 View 将正确地适合标签。搜索栏显然没有内在大小,因此需要控制它的增长。

我在搜索栏后面放了一个 uilabel,并将其限制在搜索栏的顶部、底部、前缘和后缘。我给了文本的 uilabel ALOT 并将其设置为当文本过多时它会被截断。

当我运行该应用程序时,搜索栏的宽度不为零,并且在横向切换时会根据需要缩小和拉伸(stretch)搜索栏。按钮仍会折叠到 0 宽度,但通过将压缩阻力设置为高于 uilabel 可以轻松修复它。

我知道,为此目的添加一个虚拟的 UILabel 是一种黑客行为。我愿意接受任何替代方案...

这是 example project.

关于interface-builder - 如何在 UINavigationBar 自定义 titleView 中使用自动布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324704/

相关文章:

cocoa-touch - 您可以在Interface Builder中设置导航栏的编辑按钮吗?

ios - 无法向 UIMenuController 显示多个选项

ios - 突然 Xcode 9 无法签署我的 iOS 应用程序

Xcode9:Fix All In Scope 总是被禁用

swift - 使 UIButton 在 Interface Builder 中可访问

iphone - 在团队环境中合并时使用 Interface Builder (XIB) 还是代码?

swift4 - 无法建立Objective-C模组 '_SwiftUIKitOverlayShims'

JSON 解码器 Swift 4.0

c++ - Apple Mach O-Linker 错误 Xcode (C++) : Undefined symbols for architecture x86_64

iOS:对 iCarousel 中未选择 View 的约束