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 是如何自动布局的,性能如何?