为什么我在 ScrollView 中的 View 不遵守其高度限制?

Why my UIView inside UIScrollView doesn't respect its height contraint?

我想做一个简单的UIScrollView。 为此,我在里面放了一个 UIView,然后把我所有的组件都放在这个 UIView.

里面

我的问题是我以编程方式设置了我的 UIScrollView 的 contentSize(并且它工作得很好),但是我的 UIView 不尊重这个新高度......所以我的组件在底部不在我的 UIView 中,但在我的 UIScrollView 中!

这是一个问题,因为我的 UISegmentedControl ("Consommation/Emission") 没有响应,这与有效的测试 UISegmentedControl ("First/Second") 相反。

我在 UIScrollViewUIView 之间设置了等高约束,但它不起作用...

有办法解决这个问题。 听听UIScrollViewcontentSize的变化。 当 contentsize 发生变化时,您会发现它并更改子视图的 frame(height, width..)

像这样:

[scrollView addObserver:self
             forKeyPath:@"contentSize"
                options:NSKeyValueObservingOptionNew
                context:NULL];

你在这里抓住它:

- (void) observeValueForKeyPath:(NSString*)keyPath
                       ofObject:(id)object
                         change:(NSDictionary*)change
                        context:(void *)context {
    //change subview frame accordingly
}

等高约束将使框架大小相同,但不会导致视图的高度等于内容大小。我会为视图创建一个实际的高度约束,然后创建该约束的 IBOutlet 并在您设置滚动视图的 contentSize.height 之类的东西时更新它的常量

self.viewHeightConstraint.constant = self.scrollView.contentSize.height;

无论您在哪里更新滚动视图的内容大小。我会说,在使用自动布局时,设置或更新约束通常比设置框架更好。设置框架往往会与布局引擎发生冲突。

通过选中 "Equal Heights" 框找到您设置的约束。选中 "Height" 框,为它创建一个 IBOutlet。