应用纵横比约束时 UIImageView 消失
UIImageView disappears when aspect ratio constraint applied
Xcode 9.3,MacBook Pro 运行 OS 10.13.4
当我在 IB 中向 UIView
添加宽高比约束时,视图不会在模拟器中呈现。为了找出它的去向,我记录了相关的帧坐标,但没有约束,然后出现。坐标看起来相同,但请参阅屏幕截图以了解差异。
没有限制:
self.view.center = (207.0, 368.0)
self.thumbView.center = (93.0, 207.5)
self.viewFinder.center = (187.5, 163.5)
self.view.frame = (0.0, 0.0, 414.0, 736.0)
self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)
只有纵横比限制:
self.view.center = (207.0, 368.0)
self.thumbView.center = (93.0, 207.5)
self.viewFinder.center = (187.5, 163.5)
self.view.frame = (0.0, 0.0, 414.0, 736.0)
self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)
如果您有任何想法,我们将不胜感激!
这是 IB 中的场景截图。大的UIImageView
是viewFinder
,小的是thumbView
:
这是没有限制的样子:
这是我添加纵横比约束后的样子:
编辑 1
根据下面@Anton 的评论,我从 viewFinder
的底部和侧面添加了 Proximity 限制到 thumbView
。但是,这没有产生任何变化——我仍然得到指示 thumbView
存在的坐标,但它仍然不可见。
简短的回答是:尝试将 x
和 y
位置的约束也添加到拇指视图(例如将其 leading
和 bottom
边缘对齐到viewFinder
)。您可能会得到相同的帧,因为您在自动版式完成其工作之前检查了它(例如,在 viewDidLoad
中)。还要将一些图像设置为该图像视图或为其中一个维度设置约束(没有此类约束,自动布局会尝试使用取决于 UIImageView
内容的固有大小)。之后你还必须检查 Interface builder 是否有其他错误,因为它很可能需要设置视图约束,你的 thumbView
取决于
如果您确实只有一个拇指视图约束及其纵横比约束,您可能会在界面生成器中遇到错误,告诉您必须为 x
和 [=11= 设置约束] 该视图的坐标。没有这样的限制,你会得到一个模棱两可的布局,这意味着如何设置你的视图位置有很多变化。
虽然根本没有约束,但系统会将视图的 frame
和 autoresizing mask
转换为约束,以便您获得有效的约束集来设置视图位置和大小,这就是视图可见的原因.由于您向视图添加了任何约束,因此您应该添加足够的约束以通过这些约束明确定义该视图的位置和大小。
Xcode 9.3,MacBook Pro 运行 OS 10.13.4
当我在 IB 中向 UIView
添加宽高比约束时,视图不会在模拟器中呈现。为了找出它的去向,我记录了相关的帧坐标,但没有约束,然后出现。坐标看起来相同,但请参阅屏幕截图以了解差异。
没有限制:
self.view.center = (207.0, 368.0)
self.thumbView.center = (93.0, 207.5)
self.viewFinder.center = (187.5, 163.5)
self.view.frame = (0.0, 0.0, 414.0, 736.0)
self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)
只有纵横比限制:
self.view.center = (207.0, 368.0)
self.thumbView.center = (93.0, 207.5)
self.viewFinder.center = (187.5, 163.5)
self.view.frame = (0.0, 0.0, 414.0, 736.0)
self.thumbView.frame = (30.0, 174.0, 126.0, 67.0)
self.viewFinder.frame = (16.0, 75.0, 343.0, 177.0)
如果您有任何想法,我们将不胜感激!
这是 IB 中的场景截图。大的UIImageView
是viewFinder
,小的是thumbView
:
这是没有限制的样子:
这是我添加纵横比约束后的样子:
编辑 1
根据下面@Anton 的评论,我从 viewFinder
的底部和侧面添加了 Proximity 限制到 thumbView
。但是,这没有产生任何变化——我仍然得到指示 thumbView
存在的坐标,但它仍然不可见。
简短的回答是:尝试将 x
和 y
位置的约束也添加到拇指视图(例如将其 leading
和 bottom
边缘对齐到viewFinder
)。您可能会得到相同的帧,因为您在自动版式完成其工作之前检查了它(例如,在 viewDidLoad
中)。还要将一些图像设置为该图像视图或为其中一个维度设置约束(没有此类约束,自动布局会尝试使用取决于 UIImageView
内容的固有大小)。之后你还必须检查 Interface builder 是否有其他错误,因为它很可能需要设置视图约束,你的 thumbView
取决于
如果您确实只有一个拇指视图约束及其纵横比约束,您可能会在界面生成器中遇到错误,告诉您必须为 x
和 [=11= 设置约束] 该视图的坐标。没有这样的限制,你会得到一个模棱两可的布局,这意味着如何设置你的视图位置有很多变化。
虽然根本没有约束,但系统会将视图的 frame
和 autoresizing mask
转换为约束,以便您获得有效的约束集来设置视图位置和大小,这就是视图可见的原因.由于您向视图添加了任何约束,因此您应该添加足够的约束以通过这些约束明确定义该视图的位置和大小。