为什么我在 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") 相反。
我在 UIScrollView
和 UIView
之间设置了等高约束,但它不起作用...
有办法解决这个问题。
听听UIScrollView
的contentSize
的变化。
当 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。
我想做一个简单的UIScrollView
。
为此,我在里面放了一个 UIView
,然后把我所有的组件都放在这个 UIView
.
我的问题是我以编程方式设置了我的 UIScrollView
的 contentSize(并且它工作得很好),但是我的 UIView
不尊重这个新高度......所以我的组件在底部不在我的 UIView
中,但在我的 UIScrollView
中!
这是一个问题,因为我的 UISegmentedControl
("Consommation/Emission") 没有响应,这与有效的测试 UISegmentedControl
("First/Second") 相反。
我在 UIScrollView
和 UIView
之间设置了等高约束,但它不起作用...
有办法解决这个问题。
听听UIScrollView
的contentSize
的变化。
当 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。