为什么我在UIScrollView中的UIView不尊重它的高度约束?

时间:2015-11-03 16:27:45

标签: ios objective-c uiview uiscrollview contentsize

我想做一个简单的UIScrollView。 为此,我在其中添加了UIView,并将所有组件放入此UIView

enter image description here

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

enter image description here

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

我在UIScrollViewUIView之间设置了相同的高度约束,但它不起作用...

2 个答案:

答案 0 :(得分:0)

有办法解决这个问题。 聆听contentSize UIScrollView的更改。 当contentize改变时,你抓住它并改变你的子视图的框架(高度,宽度......)

像这样:

[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
}

答案 1 :(得分:0)

相等高度约束将使框架具有相同的大小,但不会导致视图的高度等于内容大小。我会为视图创建一个实际的高度约束,然后制作该约束的IBOutlet,并在设置scrollview的contentSize.height时将其更新为常量

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

无论您在何处更新scrollview的内容大小。我想说,在使用自动布局时,设置或更新约束通常比设置帧更好。设置框架倾向于与布局引擎对抗。

enter image description here

通过选中" Equal Heights"找到您设置的约束。框。检查"高度"框创建一个IBOutlet。