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