在我的应用程序中,我有一个嵌入式子视图控制器,在运行时我必须根据来自服务器的数据添加一个或多个“Editor UIView”。我可以将每个“Editor”建模为xib文件中的完整UIViewController,并在运行时添加它。 “编辑器”的父级有一些自己的项目(比如标题和几个按钮),所以我尝试使用单个子UIViewController构建分层方法,并在运行时将“编辑器”加载到其UIScrollview中。但是我不能让Autolayout合作。该图显示了基本安排。
问题始于在UIScrollview中嵌入“内容视图”。我可以通过scrollview让内容视图正常工作。当我添加编辑器视图并向内容视图添加运行时约束时,我得到多个自动布局投诉,滚动视图内容大小为0,0所以我显然没有得到我需要的东西。
有关如何处理此问题的任何想法?我总是可以简单地为每个编辑器复制子控制器的额外项目,但是以这种分层的方式工作会很好。
注意我首先使用UITableViewController执行此操作,其中每个编辑器都是UITableViewCell并且自动布局很受欢迎,但我想看看是否可以在没有表的情况下执行此操作。也许我会回到那个。
在运行时添加了这些:
_editor = [self editorForDataType];
[_contentView addSubview:_editor];
NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeLeading
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:0];
[self.contentView addConstraint:leftConstraint];
NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeTrailing
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeRight
multiplier:1.0
constant:0];
[self.contentView addConstraint:rightConstraint];
NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeLeading
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0];
[self.contentView addConstraint:topConstraint];
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:_editor
attribute:NSLayoutAttributeTrailing
relatedBy:0
toItem:self.contentView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0];
[self.contentView addConstraint:bottomConstraint];
答案 0 :(得分:1)
最后,我需要的关键是以下约束集,以及在viewDidLayoutSubviews
中为编辑器视图添加约束并为内容视图高度保存属性。
在viewDidLoad
中,我将height属性设置为编辑器视图的高度。现在它很棒。
答案 1 :(得分:0)
您的最后两个限制是不正确的。您已经通向顶部并且从尾部到底部,这些应该是从顶部到顶部和从底部到底部。但是,这些限制可能不是你想要的。如果它是第一个编辑器视图,您可能需要对内容视图的顶部约束和高度约束。对于任何后续的,您应该将顶部固定在它上面的编辑器视图中,而不是内容视图。