代码中创建的视图与Autolayout的交互
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码中创建的视图与Autolayout的交互相关的知识,希望对你有一定的参考价值。
我有一个我在代码中创建的tableview。以前,我分配了它的绝对坐标但是当我切换到故事板中的autolayout时 - 我不知道如何将它链接到它上面的元素。
基本上,tableView应该是容器视图的子视图,它应该是textField下面的大约12个点。谁能建议正确的方法来做到这一点?
这就是我目前创建和定位tableview的方式。
_autocompleteTableView = [[UITableView alloc] initWithFrame:
CGRectMake(20, 200, 280, 300) style:UITableViewStylePlain];
[self.view addSubview:_autocompleteTableView];
故事板上面的文本字段的约束是:
textfield.leading = superview.leading+20
textfield.trailing+20 =superview.trailing
textfield.top = elementAbove.bottom+12
textfield.height=30;
谢谢你的任何建议。
答案
尝试使用锚点。它的使用非常简单,就像SB中的约束一样简单。
我认为这个guide是最好的展示它是如何工作的。向下滚动到标题创建带有布局锚点的约束的零件。
希望能帮助到你!
另一答案
试试这个
宣布
bool once = YES;
然后
-(void)viewDidLayoutSubviews
{
if(once)
{
_autocompleteTableView = [[UITableView alloc] initWithFrame:
CGRectMake(20, 200, 280, 300) style:UITableViewStylePlain];
[self.view addSubview:_autocompleteTableView];
self.autocompleteTableView.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint* con1=[NSLayoutConstraint constraintWithItem: self.view attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.autocompleteTableView attribute:NSLayoutAttributebottom multiplier:1 constant:20];
NSLayoutConstraint* con2=[NSLayoutConstraint constraintWithItem: self.view attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.autocompleteTableView attribute:NSLayoutAttributeLeading multiplier:1 constant:-20];
NSLayoutConstraint* con3=[NSLayoutConstraint constraintWithItem: self.view attribute:NSLayoutAttributeTraling relatedBy:NSLayoutRelationEqual toItem:self.autocompleteTableView attribute:NSLayoutAttributeTraling multiplier:1 constant:20];
NSLayoutConstraint* con4=[NSLayoutConstraint constraintWithItem: self.autocompleteTableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.textfield attribute:NSLayoutAttributeBottom multiplier:1 constant:12];
[self.view addConstraints:@[con1,con2,con3,con4]];
[self.view layoutIfNeeded];
once = NO;
}
}
以上是关于代码中创建的视图与Autolayout的交互的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Autolayout:在生命周期中为代码中创建的元素设置约束
在 ViewController 的 loadView 中创建的自动调整视图的 AutoLayout 约束