为什么在网址请求的成功阻止中更改xib的约束无效?

时间:2016-01-06 03:12:59

标签: ios ios-autolayout

我使用Interface Building编写了一个ViewController:顶部是TableView,底部是UIView(称为bottomView)。tableView的底部是bottomView的顶部,我添加了一个高度Constraint在bottomView中控制tableView的高度。然后我将bottomView的高度约束链接到我的viewController属性。让我们看看有关ViewController的xib图片。 ViewController's xib

viewController中的约束在后面的图片中(第一张图片是tableView' s,第二张图片是bottomBackView' s):

enter image description here enter image description here 在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时,预期结果如下(表格视图可以滚动到屏幕底部):enter image description here
但实际结果是这样的(tableView无法滚动到屏幕底部):enter image description here

根据评论,我使用了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];
}

0 个答案:

没有答案