0

我想在我的主窗口顶部显示一个简单的标签栏。这是我使用的代码:

UIView* tabBar = [[UIView alloc] init];
tabBar.backgroundColor = [UIColor redColor];
tabBar.translatesAutoresizingMaskIntoConstraints = false;

  [self.view addConstraint:
      [NSLayoutConstraint constraintWithItem:tabBar
                                   attribute:NSLayoutAttributeWidth
                                   relatedBy:NSLayoutRelationEqual
                                      toItem:self.view 
                                   attribute:NSLayoutAttributeWidth
                                  multiplier:0
                                    constant:0]];
  [self.view addConstraint:
      [NSLayoutConstraint constraintWithItem:tabBar 
                                   attribute:NSLayoutAttributeTop
                                   relatedBy:NSLayoutRelationEqual
                                      toItem:self.view
                                   attribute:NSLayoutAttributeTop
                                  multiplier:1.0f
                                    constant:0]];
  [self.view addConstraint:
      [NSLayoutConstraint constraintWithItem:tabBar
                                   attribute:NSLayoutAttributeBottom
                                   relatedBy:NSLayoutRelationEqual
                                      toItem:self.view
                                   attribute:NSLayoutAttributeTop
                                  multiplier:1.0f
                                    constant:40]];

但是标签栏无法显示。我在这里做错了什么?

4

2 回答 2

0

我发现了三个错误:

1.在添加任何约束之前,您需要在视图层次结构中添加视图。

tabBar.translatesAutoresizingMaskIntoConstraints = false;
[self.view addSubview:tabBar];

2.第一个约束乘数 == 0 它告诉 tabBar.width == 0 点;

3.last 约束想要的样子。

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:tabBar
                                   attribute:NSLayoutAttributeWidth
                                   relatedBy:NSLayoutRelationEqual
                                      toItem:nil
                                   attribute:NSLayoutAttributeNotAnAttribute
                                  multiplier:1.0f
                                    constant:40]];

或者只是按照@jrturton 的建议使用 constraintsWithVisualFormat 方法。

于 2013-11-13T02:39:07.253 回答
0

至少在此代码中,您尚未将选项卡栏添加到视图中。您还没有指定水平位置(您有宽度,但没有位置,因此视图将位于屏幕边缘的一半)。

视觉格式语言会使这更容易设置:水平是@"|[tabBar]|",垂直是@"V:|[tabBar(==40)]"。对于 VFL 无法处理的事情,您只需要使用冗长的单独约束方法即可。

于 2013-11-12T08:02:26.590 回答