NSLayoutConstraint 用于 UITableView 上的视图

Posted

技术标签:

【中文标题】NSLayoutConstraint 用于 UITableView 上的视图【英文标题】:NSLayoutConstraint for view on UITableView 【发布时间】:2015-02-21 21:36:45 【问题描述】:

我有一个UIViewController 和一个UITableView 以及一个在UITableView 上方但与屏幕底部对齐的UIView。问题是当用户打电话时,frame 设置不起作用,UIView 被推到屏幕下方(所以它被稍微覆盖了。我试图将UIView 对齐到视图底部,根本没有让它对齐。我的约束定义如下:

[self.view addSubview:self.signupView];
[self.view addSubview:self.tableView];
[self.view bringSubviewToFront:self.signupView];

NSArray *v = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_signupView(70)]-0-|"
                                                     options:NSLayoutFormatAlignAllBaseline
                                                     metrics:nil
                                                       views:NSDictionaryOfVariableBindings(_signupView)];
NSArray *h = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_signupView]|"
                                                     options:NSLayoutFormatAlignAllBottom
                                                     metrics:nil
                                                       views:NSDictionaryOfVariableBindings(_signupView)];
[self.view addConstraints:h];
[self.view addConstraints:v];

signupView 的高度是 70,它应该正好在屏幕底部与整个屏幕的宽度对齐。上面的代码是将视图放在视图的顶部。我在这里缺少什么吗?为什么它不像我上面所说的那样与底部对齐?我试图阅读以下内容:

http://commandshift.co.uk/blog/2013/01/31/visual-format-language-for-autolayout/

http://makeapppie.com/2014/07/26/the-swift-swift-tutorial-how-to-use-uiviews-with-auto-layout-programmatically/

Use autolayout to set dynamic UIView to match container view

【问题讨论】:

【参考方案1】:

想通了。

这是对我有用的以下内容:

NSArray *v = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[_signupView(70)]-0-|"
                                                     options:NSLayoutFormatAlignAllBaseline
                                                     metrics:nil
                                                       views:NSDictionaryOfVariableBindings(_signupView)];
NSArray *h = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_signupView]|"
                                                     options:NSLayoutFormatAlignAllBottom
                                                     metrics:nil
                                                       views:NSDictionaryOfVariableBindings(_signupView)];
[self.view addConstraints:h];
[self.view addConstraints:v];

【讨论】:

以上是关于NSLayoutConstraint 用于 UITableView 上的视图的主要内容,如果未能解决你的问题,请参考以下文章

获取 NSLayoutConstraint 标识符不适用于 topAnchor

@IBDesignable , NSLayoutConstraint 用于超级视图的比例乘数宽度?

NSLayoutConstraint 用于 UITableView 上的视图

NSLayoutConstraint 用于代码中未知数量的子视图

在 iOS7 中设置 NSLayoutConstraint 常量

在 `cellForRowAt` 中激活 NSLayoutConstraint 直到滚动后才会呈现