UIView 框架未在 viewDidAppear 中更新

LS_*_*LS_ 1 objective-c uiview ios

我正在使用Storyboardautolayout. 在我的中,ViewController我有一个基本结构:一个UIScrollView和一个包含不同标签的 contentView ( UIView)。然后我在viewDidAppearmy 类的方法中添加了不同的元素contentView,然后为了重新计算它的帧大小,我这样做:

- (void)fixContentViewHeight 
{
    _contentView.frame = CGRectMake(_contentView.frame.origin.x, _contentView.frame.origin.y, _contentView.frame.size.width, operators.frame.origin.y + operators.frame.size.height);
     //constraint for contentView height
    _contentViewHeight.constant = operators.frame.origin.y + operators.frame.size.height;
}

- (void)fixScrollViewHeight 
{
    _scrollView.frame = _contentView.frame;
    _scrollView.contentSize = _contentView.frame.size;
}
Run Code Online (Sandbox Code Playgroud)

其中operators是 最后放置的元素contentView,它始终位于框架的底部。我在 中调用这两个方法,viewDidAppear它们使视图可滚动,问题是 的框架contentView没有更新,因此最后一个元素始终不可单击(因为它们放置在视图框架之外)。

我究竟做错了什么?为什么scrollView变得可滚动但contentView保持旧框架?

Sim*_*lin 5

如果您有影响高度的自动布局约束,_contentView您将无法通过设置框架来更改其高度,因为约束将覆盖它。

添加新元素时,您将需要(并且应该)在代码中添加新的/修改约束。然后打电话

_contentView.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)

完成所有更新后,让 UI 在需要时进行更新,这是应该的。