Sea*_*ser 32 xcode objective-c ios nslayoutconstraint
我有一个关于设置视图大小的问题,我正在应用一些布局约束.
如何在不定义视图的情况下定义视图的大小?
我正在尝试创建一个高度固定且在屏幕原点具有原点的视图.它填充视图的宽度,以便在设备旋转时视图延伸到屏幕的宽度.这是我到目前为止所得到的......
self.containerView = [[HitTestContainerView alloc] init];
[self.containerView setBackgroundColor:[UIColor redColor]];
[self.view addSubview:self.containerView];
NSDictionary *viewsDictionary = @{@"view":self.containerView};
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[view]-250-|" options:0 metrics:nil views:viewsDictionary];
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:verticalConstraints];
[self.view addConstraints:horizontalConstraints];
Run Code Online (Sandbox Code Playgroud)
问题是除非我设置框架,否则我无法在屏幕上显示任何内容containerView
.在不使用Interface Builder的情况下执行此操作的正确方法是什么?
Cha*_*ira 49
我写了一个小工具来帮助你:
http://autolayoutconstraints.com
// align view from the left and right
[self.containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[view]-10-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]];
// width constraint
[self.containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[view(==250)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]];
// height constraint
[self.containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view(==50)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)]];
Run Code Online (Sandbox Code Playgroud)
// align view from the left and right
self.containerView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[view]-10-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": view]));
// width constraint
self.containerView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[view(==250)]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": view]));
// height constraint
self.containerView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[view(==50)]", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: ["view": view]));
Run Code Online (Sandbox Code Playgroud)
mat*_*att 46
要使用布局约束定义视图的高度和宽度,您可以使用布局约束来定义视图的高度和宽度.例如,您已经说过:
NSArray *verticalConstraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[view]-250-|"
options:0 metrics:nil views:viewsDictionary];
Run Code Online (Sandbox Code Playgroud)
所以你可以改为:
NSArray *verticalConstraints =
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(50)-[view(40)]"
options:0 metrics:nil views:viewsDictionary];
Run Code Online (Sandbox Code Playgroud)
现在,视图将从其超视图顶部50像素,高40像素.
或者,您可以使用constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
设置高度约束; toItem
当然,这将是零,因为与另一种观点没有任何关系.
比以后更好......
对于Storyboard,IB和Swift:
只需控制 - 将您的约束像任何其他控件一样拖动到viewController
@IBOutlet weak var spaceToTopThatIDecided: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)
然后简单地改变它:
spaceToTopThatIDecided.constant = 44
Run Code Online (Sandbox Code Playgroud)
就这样!