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



我正在代码中创建一个表视图,并希望使用自动布局将其直接放置在情节提要中屏幕上最低元素的正下方。 由于自动布局,最下层元素的位置会根据屏幕上元素的内容而变化。

无论如何,是否可以从故事板中获取具有出口的元素并使用代码为其创建约束?

这是我创建表的方式:

_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];

基本上,我希望表格视图显示在底部元素下方 12 点。

但是,在创建约束后,它显示为未使用的变量。 如何让表视图适应此约束? 有没有办法使表格最初出现在正确的位置?

如果底部元素位于 scollview 的底端,请不要忘记删除底部元素的最底部约束,以将表视图挂钩到它并将表视图的底部挂钩到滚动视图

   -(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;
      }
   }

最新更新