UIView 的子视图在边界外渲染
Posted
技术标签:
【中文标题】UIView 的子视图在边界外渲染【英文标题】:UIView's subviews rendering outside bounds 【发布时间】:2016-02-12 17:36:50 【问题描述】:我在界面生成器中为视图创建了一个笔尖。它的子视图放置有约束,以便它们可以随着视图框架的大小而缩放。
我使用辅助方法从其 nib 初始化视图:
+ (TinyTestResultsView *)ttrView
TinyTestResultsView *ttrV = [[[NSBundle mainBundle] loadNibNamed:@"TinyTestResultsViewNib" owner:nil options:nil] firstObject];
[ttrV commonInit];
return ttrV;
在视图控制器的viewDidLoad
期间,我使用ttrView
方法初始化对象并将其作为子视图添加到self.view
。然后 VC 调用网络以获取一些信息,然后根据需要将约束添加到 self.view
和放置它的子视图。它被正确放置和调整大小 - 但是视图显示为没有子视图的白框。 为什么子视图会在视图外渲染?
如果我在 Xcode 中使用 Debug View Hierarchy 然后尝试查找子视图,我会看到它们被渲染到框架之外,并且它们不符合 NIB 的自动布局规则。我对不同的自定义 UIView/nib 使用了完全相同的技术,所以我不确定会发生什么错误。
【问题讨论】:
【参考方案1】:您的视图似乎需要将translatesAutoresizingMaskIntoConstraints
设置为NO
。当您以这种方式从 Nib 文件加载视图时,此属性设置为 YES
,这意味着系统会创建一组约束,这些约束复制视图的自动调整大小掩码指定的行为。当您使用自动布局时,这不是您想要的。
【讨论】:
我在commonInit
中有self.translatesAutoresizingMaskIntoConstraints = NO;
您没有与此视图的 nib 文件中的约束相关的警告吗?
在 nib 文件的预览中尝试look(如果您还没有这样做)。视图的布局是否正确?
无约束冲突,预览照原样呈现。
感谢您的帮助@curious。在刷新期间,我删除了视图的所有约束,没有意识到这些约束真正影响了它的子视图,而不仅仅是视图本身。修好了。以上是关于UIView 的子视图在边界外渲染的主要内容,如果未能解决你的问题,请参考以下文章