【问题标题】:How to resize a parent view based on the size of subviews layouted with Autolayout如何根据使用 Autolayout 布局的子视图的大小调整父视图的大小
【发布时间】:2012-10-14 15:14:15
【问题描述】:

我正在准备一个与屏幕截图中的示例类似的自定义视图。我在运行时添加所有用户界面组件(标签、文本字段、单选按钮……)。要定位我使用Autolayout 约束的元素。到目前为止,这部分工作正常。

元素的数量因上下文而异。我想知道如何使用 Autolayout 约束来动态调整父视图的大小(很可能是视图的高度)。因此,视图约束应考虑为当前附加的子视图定义的高度和边距。

【问题讨论】:

    标签: objective-c cocoa resize autolayout nslayoutconstraint


    【解决方案1】:

    我已通过以下设置完成此操作:

    • 容器视图没有高度限制
    • 顶部子视图与容器视图顶部有间距约束
    • 包含的视图之间都有间距限制
    • 底部视图对容器视图底部有间距约束

    自动布局系统通过调整容器大小以适应其内容来满足这些约束。

    当然,您需要在更改内容时动态设置约束。

    【讨论】:

    • 您会等待哪个事件知道布局管理器已完成其工作,即扩大或缩小容器视图?
    • 在 iOS 中,它将是视图控制器中的 viewDidLayoutSubviews,但我不确定可可等价物。你有什么需要知道的原因吗?
    • 我正在使用自动布局作为更大组合的一部分,该组合本身不使用自动布局。因此,当布局管理器完成工作时,我需要重新排列组合部分。
    • 哦,好吧,很痛苦。我真的不想说,我已经好几年没有做过 OS X 开发了。
    • 我想 1) 谢谢你的回答,2) 强调数字 2 和 4 的重要性。我一直在努力解决这个问题,因为我的子视图 (UIButtons) 显示了,但是无法点击。原来 superview 没有大小(即 0x0),因为缺少到 superview 约束的间距。
    【解决方案2】:

    如果您使用的是 NSStackView,请确保您没有设置它的高度和宽度的约束,并确保所有边都被锚定。

    还要确保将内容拥抱属性设置为 1000。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多