IOS / Autolayout / Objective-C:在引用Storyboard中的元素的代码中创建约束

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS / Autolayout / Objective-C:在引用Storyboard中的元素的代码中创建约束相关的知识,希望对你有一定的参考价值。

我正在代码中创建一个tableview,并希望使用autolayout直接在故事板中屏幕上最低元素下面放置它。最低元素的位置因基于屏幕上元素的内容而自动布局而变化。

无论如何都要抓住一个有故事板出口的元素并使用代码创建一个约束?

这是我创建表的方式:

_myTableView = [[UITableView alloc] initWithFrame:
                              CGRectMake(20, 714, 280, 200) style:UITableViewStylePlain];
    _myTableView.delegate = self;
    _myTableView.dataSource = self;
    _myTableView.scrollEnabled = NO;
    _myTableView.layer.cornerRadius = 5;
    _myTableView.backgroundColor = [UIColor whiteColor];
    _myTableView.rowHeight=28;
    [self.scrollView addSubview:_myTableView]; 

这就是我通常在代码中创建约束的方式:

 NSLayoutConstraint *tableToBottomElement = [NSLayoutConstraint 
constraintWithItem:_myTableView attribute:NSLayoutAttributeTop 
relatedBy:NSLayoutRelationEqual toItem:self.bottomElement 
attribute:NSLayoutAttributeBottom multiplier:1 constant:12];

基本上我希望tableview出现在底部元素下方12点。

但是,在创建约束后,它将显示为未使用的变量。我如何让tableview适应这个约束?有没有办法让桌子最初出现在正确的位置?

答案

不要忘记删除底部元素的最底部约束,如果它位于scollview的底端以将tableview挂钩到它并将tableview的底部挂钩到scrollview

   -(void)viewDidLayoutSubviews
   {
      if(once){

      _myTableView.translatesAutoresizingMaskIntoConstraints = NO;

      NSLayoutConstraint *con1 = [NSLayoutConstraint 
      constraintWithItem:_myTableView attribute:NSLayoutAttributeTop 
      relatedBy:NSLayoutRelationEqual toItem:self.bottomElement 
      attribute:NSLayoutAttributeBottom multiplier:1 constant:12];

     NSLayoutConstraint *con2 = [NSLayoutConstraint 
     constraintWithItem:_myTableView attribute:NSLayoutAttributeTrailing 
     relatedBy:NSLayoutRelationEqual toItem:self.scrollView  
     attribute:NSLayoutAttributeTrailing multiplier:1 constant:0];

      NSLayoutConstraint *con3 = [NSLayoutConstraint 
      constraintWithItem:_myTableView attribute:NSLayoutAttributeLeading
      relatedBy:NSLayoutRelationEqual toItem:self.scrollView  
      attribute:NSLayoutAttributeLeading multiplier:1 constant:0];

      NSLayoutConstraint *con4 = [NSLayoutConstraint 
      constraintWithItem:_myTableView attribute:NSLayoutAttributeBottom 
      relatedBy:NSLayoutRelationEqual toItem:self.scrollView  
      attribute:NSLayoutAttributeBottom multiplier:1 constant:0];

      [self.scrollView  addConstraints:@[con1,con2,con3,con4]];

      [self.view layoutIfNeeded];

      once = NO;

      }

   }

以上是关于IOS / Autolayout / Objective-C:在引用Storyboard中的元素的代码中创建约束的主要内容,如果未能解决你的问题,请参考以下文章

iOS AutoLayout的用法

iOS AutoLayout的用法

iOS - AutoLayout'无法同时满足约束'

iOS进阶 - AutoLayout 是如何自动布局的,性能如何?

iOS进阶 - AutoLayout 是如何自动布局的,性能如何?

[iOS开发]autolayout自动布局