我遇到嵌入式视图和自动布局的问题。
我创建了一个视图,这有点复杂。所以现在 我想重构这个视图并创建一些视图组件。我得到了一个观点,并在一个uiview课程中聚集在一起,并将其所有逻辑放在那里。让我们将此视图称为XView。好到现在为止。
所以我尝试在主视图中嵌入XView,以查看视图的工作原理及其新组件。我把这个命令:
xViewInstance = ...
[self.container addSubview:xViewInstance];
它不起作用。 xViewInstance大于父视图。我想调整xViewInstance的大小。
所以我用谷歌搜索答案,看看出了什么问题。我找到了一些可以帮助我的答案。我找到了PureLayout。
所以我尝试了它。
- (void)updateViewConstraints {
if (!self.didSetupConstraints) {
[self.xViewInstance autoPinEdgesToSuperviewEdges];
self.didSetupConstraints = true;
}
[super updateViewConstraints];
}
它不起作用。 xViewInstance继续比其父级更大。
我在堆栈中找到了另一个答案,一个在代码中创建约束的代码,用于以编程方式调整子视图。再次它没有用。
现在我没有意识到什么。我想这可能是xViewInstance约束的一些优先级。
有人曾经过这种情况吗?如果有人能就此提出一些建议,我将非常感激。
答案 0 :(得分:0)
我相信这篇文章可以解决你的问题:
Use autolayout to set dynamic UIView to match container view
我测试了它并且它起作用了:
- (void)viewDidLoad {
[super viewDidLoad];
// Init with a huge frame to see if it resizes.
xView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 800)];
xView.translatesAutoresizingMaskIntoConstraints = NO;
xView.backgroundColor = [UIColor redColor];
[containerView addSubview:xView];
[self addConstraints];
}
- (void)addConstraints
{
[containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0]];
[containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0]];
[containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0]];
[containerView addConstraint:[NSLayoutConstraint constraintWithItem:xView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:containerView
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0.0]];
}
的Wg