以编程方式生成视图的自动布局

3

有两个视图headerView和footterView。我希望这些视图能够一个接一个地放置。 也就是说,headerView在顶部,footerView在headerView下面。

UIView *mainview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    headerView =  [[[NSBundle mainBundle] loadNibNamed:@"BaseHeader" owner:self options:nil] objectAtIndex:0];
    footterView = [[[NSBundle mainBundle] loadNibNamed:@"BaseFotter" owner:self options:nil] objectAtIndex:0];

 self.view = mainview;
 [mainview  addSubview:headerView];
 [mainview  addSubview:footterView];

我尝试添加以下约束条件

NSDictionary *viewsDictionary =
NSDictionaryOfVariableBindings(headerView,footterView);

NSLayoutConstraint *constraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headerView]-[footterView]|" options:0 metrics:nil views:viewsDictionary] objectAtIndex:0];

NSLayoutConstraint *mconstraint = [[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headerView(==footterView)]|" options:0 metrics:nil views:viewsDictionary] objectAtIndex:0];

[mainview addConstraint:constraint];
[mainview addConstraint:mconstraint];

但总是仅显示尾部视图。 如果我按以下顺序添加视图,则始终显示HeaderView。

[mainview  addSubview:footterView];
[mainview  addSubview:headerView];

在xib文件(BaseHeader.xib和BaseFotter.xib)中都选中了AutoLayout。我需要在xib中再做什么吗?


1
您需要设置一些水平约束和/或宽度(对于其中一个视图),以使约束条件明确无误。 - rdelmar
此外,在你的constraintsWithVisualFormat语句中,为什么要使用objectAtIndex:0方法?该方法创建一个约束数组,你想将其添加到视图中。为什么只添加第一个呢? - rdelmar
呀,我应该添加所有的约束条件。我正在添加约束条件数组。 - Sowmia Sundararajan
1个回答

1

将代码添加到您的约束条件中:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headerView]-[footterView]|" options:0 metrics:nil views:viewsDictionary];

NSArray *mconstraints = [NSLayoutConstraint constraintsWithVisualFormat=@"V:|[headerView(==footterView)]|" options:0 metrics:nil views:viewsDictionary];

[mainview addConstraints:constraints]; [mainview addConstraints:mconstraints];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接