自动布局:包含 UILabel + UIButton 的标题视图
Posted
技术标签:
【中文标题】自动布局:包含 UILabel + UIButton 的标题视图【英文标题】:Autolayout: Title View that Grows to Encompass UILabel + UIButton 【发布时间】:2015-10-02 06:30:09 【问题描述】:我正在自定义视图控制器的标题视图,以便显示(从左到右):
-
一个与默认标题标签非常相似的 UILabel,
信息类型的 UIButton,放置在标签之后固定距离处。
我希望,随着标签水平增长以容纳更长的文本,它会将按钮推向更远的右侧(标签和按钮之间的水平空间保持不变),而整个标题视图会调整自身大小以包含标签和按钮,同时保持在导航栏的中心。
这就是我所做的(界面生成器):
-
将 UINavigationItem 拖入导航栏;
将一个 UIView 拖到导航项中,作为标题视图;
将标签和按钮拖到标题视图中,定位和调整大小。
设置以下约束:
标签 -> 标题视图:
-
领先空间到容器边距
在容器中垂直居中
按钮 -> 标题视图:
-
容器边距的尾随空间
在容器中垂直居中
(标题视图本身不受约束)
但是,标题视图保持固定大小。如果在运行时我设置的标题比情节提要中设置的占位符长,它会被修剪(“...”):
如果我设置一个较短的,标签和按钮之间会出现额外的空间:
或者,如果我添加以下约束:
标签 -> 按钮: 1.水平间距
...现在按钮完全被标签隐藏了:
我怎样才能让标题视图水平增长(同时保持居中),以便它适合(灵活)标签和(固定)按钮,并保持它们之间的空间固定?
【问题讨论】:
【参考方案1】:导航项未设置为直接处理此问题。您需要使用约束来设置标题视图的框架,然后将其添加到 nab 项目。因此,每次更改文本时,您都需要通过删除视图、调整其大小然后再次添加它来做一些小动作。关键API是systemLayoutSizeFittingSize
。
【讨论】:
我明白了...也许我最好在单独的 xib 中设计我的标题视图(具有自己的约束),并实例化/配置/添加到导航项(即设置为 @987654322 @) 在运行时? 是的,这是一种干净的方法【参考方案2】:将按钮的约束更改为标签的水平空间
按钮 -> 标题视图:
要标注的水平空间
在容器中垂直居中
【讨论】:
以上是关于自动布局:包含 UILabel + UIButton 的标题视图的主要内容,如果未能解决你的问题,请参考以下文章
无法在具有动态宽度的 Tablecell 中并排自动布局两个 UILabel
只需要修复 UIButton 和 UILabel 的自动布局问题