LS_*_*LS_ 1 objective-c uiview ios
我正在使用Storyboard与autolayout. 在我的中,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保持旧框架?
如果您有影响高度的自动布局约束,_contentView您将无法通过设置框架来更改其高度,因为约束将覆盖它。
添加新元素时,您将需要(并且应该)在代码中添加新的/修改约束。然后打电话
_contentView.layoutIfNeeded()
Run Code Online (Sandbox Code Playgroud)
完成所有更新后,让 UI 在需要时进行更新,这是应该的。