在导航栏下添加 1pt Bar

Adding 1pt Bar under navigation bar

我创建了一个这样的视图,我想将它放在导航栏的正下方,但我添加的约束没有任何作用,并且一直将导航栏保持在视图的顶部。

_navSeparator = [[UIView alloc]initWithFrame: CGRectMake(0, 0, 
                 self.view.frame.size.width, 1)];
_navSeparator.backgroundColor = 
                          [UIColor darkColorTheme];
[self.view addSubview:_navSeparator];
[self.view addConstraint:[NSLayoutConstraint 
      constraintWithItem:_navSeparator attribute:NSLayoutAttributeTop 
      relatedBy:NSLayoutRelationEqual toItem:topGuide 
      attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0]];

它有一些任意的导航标题。

如果您想使用 AutoLayout,请设置您的视图 translatesAutoresizingMaskIntoConstraints NO。然后 Constraint 将起作用并且框架将无用。

所以我们应该添加完整的约束(前导、顶部、尾随、高度),例如:

_navSeparator = [[UIView alloc] init];
_navSeparator.translatesAutoresizingMaskIntoConstraints = NO;
_navSeparator.backgroundColor =
[UIColor blackColor];

[self.view addSubview:_navSeparator];
[self.view addConstraint:[NSLayoutConstraint
                          constraintWithItem:_navSeparator attribute:NSLayoutAttributeTop
                          relatedBy:NSLayoutRelationEqual toItem:self.view.safeAreaLayoutGuide
                          attribute:NSLayoutAttributeTop multiplier:1.0 constant:0]];
[self.view addConstraint:[NSLayoutConstraint
                          constraintWithItem:_navSeparator attribute:NSLayoutAttributeLeading
                          relatedBy:NSLayoutRelationEqual toItem:self.view
                          attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0]];
[self.view addConstraint:[NSLayoutConstraint
                          constraintWithItem:_navSeparator attribute:NSLayoutAttributeTrailing
                          relatedBy:NSLayoutRelationEqual toItem:self.view
                          attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0]];
[_navSeparator addConstraint:[NSLayoutConstraint
                          constraintWithItem:_navSeparator attribute:NSLayoutAttributeHeight
                          relatedBy:NSLayoutRelationEqual toItem:nil
                          attribute:NSLayoutAttributeNotAnAttribute multiplier:0 constant:1.0]];

此外 iOS11+ 请将 topGuide 修改为 self.view.safeAreaLayoutGuide 因为在文档中我们知道

Use view.safeAreaLayoutGuide.topAnchor instead of topLayoutGuide.bottomAnchor

另一件事是,如果您确实想要 1pt 高度的视图。您可以设置其高度约束的常量,如 1.0 / [UIScreen mainScreen].scale