我使用Interface Building编写了一个ViewController:顶部是TableView,底部是UIView(称为bottomView)。tableView的底部是bottomView的顶部,我添加了一个高度Constraint在bottomView中控制tableView的高度。然后我将bottomView的高度约束链接到我的viewController属性。让我们看看有关ViewController的xib图片。
viewController中的约束在后面的图片中(第一张图片是tableView' s,第二张图片是bottomBackView' s):
在ViewController中,我使用IBOutlet对应的链接如下:
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *bottomViewHeightConstraint;
现在我在url请求的成功块中更改bottomViewHeightConstraint的常量,如下所示:
[getContacts startWithParams:@{@"bizId":self.bizId, @"bizCode":@(self.bizCode)} success:^(id responseObject) {
self.bottomViewHeightConstraint.constant = self.bottomContentView.height;
[self.view setNeedsLayout];
}
第一次,self.bottomViewHeightConstraint.constant的值在这里是70,结果是正确的。第二次值为0时,预期结果如下(表格视图可以滚动到屏幕底部):
但实际结果是这样的(tableView无法滚动到屏幕底部):
根据评论,我使用了GCD:
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(mainQueue, ^{
self.bottomContentView.frame = CGRectMake(0.0f, 0.0f, SCREENWIDTH, 0.0f);
[self.bottomContentView configViewWithModel:model];
self.bottomViewHeightConstraint.constant = self.bottomContentView.height;
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
});
它也不起作用。有一点让我感到困扰:当我在方法' viewDidLoad'中调用的方法中更改此约束的常量时,如果我不打电话,它就不起作用方法' layoutIfNeeded'喜欢这个代码(我认为呼叫方法' setNeedsLayout'就足够了):
- (void)viewDidLoad
{
[super viewDidLoad];
[self addBottomView];
}
- (void)addBottomView {
self.bottomContentView.delegate = self;
self.bottomContentView.frame = CGRectMake(0.0f, 0.0f, SCREENWIDTH, 0.0f);
self.bottomViewHeightConstraint.constant = 0.0f;
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
[self.bottomBackView addSubview:self.bottomContentView];
}