Autolayout和UIScrollview以及子视图控制器问题

时间:2015-05-12 16:00:23

标签: ios objective-c uiviewcontroller uiscrollview autolayout

在我的应用程序中,我有一个嵌入式子视图控制器,在运行时我必须根据来自服务器的数据添加一个或多个“Editor UIView”。我可以将每个“Editor”建模为xib文件中的完整UIViewController,并在运行时添加它。 “编辑器”的父级有一些自己的项目(比如标题和几个按钮),所以我尝试使用单个子UIViewController构建分层方法,并在运行时将“编辑器”加载到其UIScrollview中。但是我不能让Autolayout合作。该图显示了基本安排。 enter image description here

问题始于在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];

2 个答案:

答案 0 :(得分:1)

最后,我需要的关键是以下约束集,以及在viewDidLayoutSubviews中为编辑器视图添加约束并为内容视图高度保存属性。

viewDidLoad中,我将height属性设置为编辑器视图的高度。现在它很棒。

enter image description here

答案 1 :(得分:0)

您的最后两个限制是不正确的。您已经通向顶部并且从尾部到底部,这些应该是从顶部到顶部和从底部到底部。但是,这些限制可能不是你想要的。如果它是第一个编辑器视图,您可能需要对内容视图的顶部约束和高度约束。对于任何后续的,您应该将顶部固定在它上面的编辑器视图中,而不是内容视图。