代码中创建的视图与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 约束

在 django-page-CMS 中创建的视图会禁用所有 CSS?包含代码,请修复

以 Autolayout 视觉形式调整子视图的大小

使用 Swift 在代码中创建的中心 UILabel

代码中创建的 UITabBarItem 图像不出现