我有一种情况,其中Window有2个子视图A和B,A视图包含2个子视图A1和A2。我必须根据A1和A2是否可用来显示View A的高度。 示例:如果A1可用,那么A2不是预期A的高度是A1高度+填充。并根据视图A和B之间的垂直间距约束重新调整视图B的高度。 - 如果A1和A2都可用,则A' height = A1 height + padding + A2 height + padding。并且基于垂直间距约束,相同的B高度重新调整。
___________________________
| _________________________
| | A _____________________
| | |_A1__________________
| | ______________________
| | |__A2__________________
| |________________________
|
| ________________________
| | B
| |
| |________________________
|
|
|__________________________
___________________________
| _________________________
| | A _____________________
| | |_A1__________________
| |________________________
|
| ________________________
| | B
| |
| |________________________
|
|
|__________________________
答案 0 :(得分:0)
我认为您已自定义了名为LiveView
的视图,其中包含您描述的所有视图。我在下面放了一些代码,稍后再解释一下。
@implementation LiveView
- (id)init {
self = [super init];
if (!self) return nil;
// Iniitlize your view hierarchy
return self;
}
+ (BOOL)requiresConstraintBasedLayout
{
return YES;
}
// this is Apple's recommended place for adding/updating constraints
- (void)updateConstraints {
// Define or update your constraints
// tell constraints they need updating
[self setNeedsUpdateConstraints];
// update constraints now so we can animate the change
[self updateConstraintsIfNeeded];
[UIView animateWithDuration:0.4 animations:^{
[self layoutIfNeeded];
}];
}

如您所见,您应该在- (id)init
中初始化视图层次结构。并覆盖+ (BOOL)requiresConstraintBasedLayout
方法并返回YES
。然后覆盖应该定义或更新约束的- (void)updateConstraints
方法。当您调用方法- (void)updateConstraints
中将更新约束和布局的所有方法时。
答案 1 :(得分:-1)
<强> 1。您可以使用代码
提供框架 viewA1.frame = [self frameForViewA1];
viewA2.frame = CGRectZero;
viewA.frame = CGRectMake(0.0f, 0.0f, DESIRED_WIDTH, viewA1.frame.size.height + DESIRED_PADDING + viewA2.frame.size.height);
<强> 2。您可以使用容器视图
UIView containerView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, DESIRED_WIDTH, viewA1.frame.size.height + DESIRED_PADDING + viewA2.frame.size.height)];
然后为视图A添加自动布局约束以适合containerView
高度。