【发布时间】:2015-05-12 16:00:23
【问题描述】:
在我的应用程序中,我有一个嵌入式子视图控制器,在运行时我必须根据来自服务器的数据添加一个或多个“编辑器 UIView”。我可以在 xib 文件中将每个“编辑器”建模为完整的 UIViewController 并在运行时添加它。 “编辑器”的父级有自己的一些项目(如标题和几个按钮),所以我尝试使用单个子 UIViewController 构建分层方法,并将“编辑器”动态加载到其 UIScrollview 中。但是我无法让 Autolayout 合作。该图显示了基本布置。
问题始于将“内容视图”嵌入到 UIScrollview 中。我可以让内容视图与滚动视图一起正常工作。当我添加编辑器视图并向内容视图添加运行时约束时,我收到多个自动布局投诉,而且滚动视图内容大小为 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];
【问题讨论】:
-
您是否将 _editor 视图的 translatesAutoresizingMaskIntoConstraints 设置为 NO?
-
是的,虽然默认情况下似乎是 NO。
-
你是通过什么方法添加约束的?
viewDidLoad? -
是 viewDidLoad。我想知道这是否为时过早。
标签: ios objective-c uiviewcontroller uiscrollview autolayout