gpt4 book ai didi

objective-c - AutoLayout中如何取较大的高度作为父高度

转载 作者:行者123 更新时间:2023-12-03 17:49:07 27 4
gpt4 key购买 nike

我有一个 View ,其中包含两个垂直 View 。假设上 View 是 A,下 View 是 B。B 包含 2 个水平 View 。假设它们是 B-1 和 B-2。所以看起来像

  |------------------|
| A |
| |
|------------------|
| B | (There is no margin around B-1 and B-2)
||-------||-------||
|| B-1 || B-2 || (B-1 and B-2 has intrinsic content size)
||-------||-------||
|----------------- |

我想让A的高度更大,只要B-1和B-2可以显示它们的内容(通过自动布局)。B-1和B-2的高度可能不同,所以我必须将B的高度设置为两者中较大的高度。

我的第一个想法是返回B的固有大小。在B的intrinsicContentSize方法中,我可以计算哪个大小更大并返回它的大小。

看起来它可以工作,但我感觉有点尴尬,因为如果我添加另一个像 B-3 这样的 View ,我必须重写代码。我想编写一个干净的自动布局约束来满足要求。

有没有更好的解决方案通过 AutoLayout 来解决这个问题?

最佳答案

您还没有说明当 B-1 和 B-2 具有不同的高度时,您希望如何在 B 内垂直排列它们。例如,它们可能都是顶部对齐、都垂直居中、底部对齐或其他对齐方式。

无论如何,通常的做法是直接指定规则:

  1. B.top == B1.top
  2. B.top == B2.top
  3. B1.bottom <= B.bottom
  4. B2.bottom <= B.bottom
  5. B.height == 0 @优先级200
  6. superview.top == A.top
  7. A.bottom == B.top
  8. B.bottom == superview.bottom

我选择将 B-1 和 B-2 顶部对齐。这是通过前两个约束实现的。接下来的两个确保 B 足够高以显示他们两人的完整高度。约束 5 确保 B 不高于必要的高度。约束 6 到 8 使 A 和 B 垂直相邻并填充 super View 。

当然,您也需要水平约束,但我认为您可以处理它。

您不应该让 B 计算内在内容大小。容器 View 的大小不是内在的,而是外在的。它源自其他事物的大小,而不是其自身(非 View )内容。

关于objective-c - AutoLayout中如何取较大的高度作为父高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33192148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com