Ale*_*son 5 uiview ios autolayout swift
具有正确自动布局的 UIView 不会返回正确的内在内容大小。尽管我可以看到它在情节提要中和应用程序运行时的大小都正确,但我得到了 (-1.0, -1.0)。
我尝试创建一个 Playground 来创建 UIView (a) 和 UILabel。我将标签添加为 (a) 的子视图并设置左、右、上、下约束。我还设置了一些文本并验证我的标签具有正确的内在尺寸(确实如此)。我的 (a) 视图返回 (-1.0, -1.0) 作为内在内容大小。
我还尝试使用故事板创建一个新项目。我在视图中添加了一个 UIView (a) 并将其居中(X 和 Y)。我在我的 (a) 视图中添加了一个 UILabel 并约束左、右、上、下。我可以看到 (a) 视图大小正确。当我运行该应用程序时,我发现它的大小仍然正确。我的 (a) 视图返回 (-1.0, -1.0) 作为内在内容大小。
考虑到 UIView 根据其内在内容大小(即子视图和相关约束)进行布局,我发现这非常奇怪。
假设我的标签对 (a) 视图边缘的约束距离均为 0,那么我希望我的 (a) 视图的内在内容大小等于我的标签框架的内在内容大小(基于内在大小)标签,但这有点没有意义)。
我真的不明白视图如何将其框架设置为等于其子元素的固有大小,同时没有固有的内容大小。
((a)视图的框架返回正确的大小,但这并不能真正回答我的问题。另外 - 它对我的特定情况没有帮助,但这超出了这个问题的范围。)
考虑到 UIView 根据其内在内容大小(即子视图和相关约束)进行布局,我发现这非常奇怪。
这只是对“内在内容大小”的误解。普通的 UIView 没有(有意义的)内在内容大小。
固有内容大小是某些界面对象(例如 UILabel 和 UIButton)实现的属性,因此您不必给它们提供高度和宽度约束。这些是特殊的界面对象,包含文本(和/或,如果是按钮,则包含图像),并且可以调整自身大小以适应文本。
你的 UIView 不是这样的,并且基本上根本不实现内在的内容大小。可以编写一个 UIView 子类来实现内部内容大小,其行为类似于 UILabel 或 UIButton;但你还没有这样做。
你在评论中说:
如果我有一个只有中心 X 和中心 Y 约束的 UIView,并且给定它有一些内容,我想知道自动布局运行后它的大小是多少
很好,但这不是其内在的内容大小。这是它的大小。如果您在视图控制器中,请实现didLayoutSubviews并查看该视图的bounds.size. 这就是你想要的尺寸。
我很好奇如何计算这个
喔好吧。但你应该问这个。答案是:打电话systemLayoutSizeFittingSize。
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |