【问题标题】:AutoLayout for Views Generated Programmatically以编程方式生成的视图的自动布局
【发布时间】:2013-11-16 06:14:31
【问题描述】:

有两个视图 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];

但始终只在屏幕上显示 footerView。 如果我按以下顺序添加视图,则始终显示 HeaderView。

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

在 xib(BaseHeader.xib 和 BaseFotter.xib)中都检查了 AutoLayout。我还需要在 xib 中做些什么吗?

【问题讨论】:

  • 您需要设置一些水平约束和/或宽度(对于其中一个视图)以使约束明确。
  • 另外,你为什么在你的 constraintsWithVisualFormat 行中使用 objectAtIndex:0 ?该方法创建了一组约束,您希望将其添加到视图中。为什么只添加第一个?
  • 是的。我应该添加所有约束。我正在添加一系列约束。

标签: ios objective-c autolayout xib custom-view


【解决方案1】:

更改您的约束,将代码添加到:

NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headerView]-[footterView]|"选项:0 指标:nil 视图:viewsDictionary];

NSArray *mconstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[headerView(==footterView)]|"选项:0 指标:nil 视图:viewsDictionary];

[主视图添加约束:约束]; [mainview addConstraints:mconstraints];

【讨论】:

    猜你喜欢
    • 2012-09-17
    • 2016-12-14
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    相关资源
    最近更新 更多