【问题标题】:Autolayout: Title View that Grows to Encompass UILabel + UIButton自动布局:包含 UILabel + UIButton 的标题视图
【发布时间】:2023-04-02 13:26:01
【问题描述】:

我正在自定义视图控制器的标题视图,以便显示(从左到右):

  1. 一个与默认标题标签非常相似的 UILabel,
  2. 信息类型的 UIButton,放置在标签之后固定距离处。

我希望,随着标签水平增长以容纳更长的文本,它会将按钮推向更远的右侧(标签和按钮之间的水平空间保持不变),而整个标题视图会调整自身大小以包含标签和按钮,同时保持在导航栏的中心。

这就是我所做的(界面生成器):

  1. 将 UINavigationItem 拖入导航栏;
  2. 将一个 UIView 拖到导航项中,作为标题视图;
  3. 将标签和按钮拖到标题视图中,定位和调整大小。
  4. 设置以下约束:

    标签 -> 标题视图:

    1. 领先空间到容器边距
    2. 在容器中垂直居中

    按钮 -> 标题视图:

    1. 容器边距的尾随空间
    2. 在容器中垂直居中

(标题视图本身不受约束)

但是,标题视图保持固定大小。如果在运行时我设置的标题比情节提要中设置的占位符长,它会被修剪(“...”):

如果我设置一个较短的,标签和按钮之间会出现额外的空间:

或者,如果我添加以下约束:

标签 -> 按钮: 1.水平间距

...现在按钮完全被标签隐藏了:

我怎样才能让标题视图水平增长(同时保持居中),以便它适合(灵活)标签和(固定)按钮,并保持它们之间的空间固定?

【问题讨论】:

    标签: ios storyboard autolayout uinavigationitem


    【解决方案1】:

    导航项未设置为直接处理此问题。您需要使用约束来设置标题视图的框架,然后将其添加到 nab 项目。因此,每次更改文本时,您都需要通过删除视图、调整其大小然后再次添加它来做一些小动作。关键API是systemLayoutSizeFittingSize

    【讨论】:

    • 我明白了...也许我最好在单独的 xib 中设计我的标题视图(具有自己的约束),并实例化/配置/添加到导航项(即设置为 @987654322 @) 在运行时?
    • 是的,这是一种干净的方法
    【解决方案2】:

    将按钮的约束更改为标签的水平空间

    按钮 -> 标题视图:

    要标注的水平空间

    在容器中垂直居中

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2015-09-01
      • 2013-06-29
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多