为啥我在 ScrollView 中的 UIView 不遵守它的高度限制?
Posted
技术标签:
【中文标题】为啥我在 ScrollView 中的 UIView 不遵守它的高度限制?【英文标题】:Why my UIView inside UIScrollView doesn't respect its height contraint?为什么我在 ScrollView 中的 UIView 不遵守它的高度限制? 【发布时间】:2015-11-03 16:27:44 【问题描述】:我想做一个简单的UIScrollView
。
为此,我在其中放了一个UIView
,并将我的所有组件都放入了这个UIView
。
我的问题是我以编程方式设置了我的 UIScrollView
的 contentSize(并且它工作得很好),但我的 UIView
不尊重这个新高度......所以我底部的组件不在我的 @ 987654330@ 但在我的UIScrollView
中!
这是一个问题,因为我的 UISegmentedControl
(“Consommation/Emission”)没有响应,这与有效的测试 UISegmentedControl
(“First/Second”)相反。
我在UIScrollView
和UIView
之间设置了相等的高度限制,但它不起作用...
【问题讨论】:
【参考方案1】:等高约束将使框架大小相同,但不会导致视图高度等于内容大小。我会为视图创建一个实际的高度约束,然后使该约束的 IBOutlet 并在您设置滚动视图的 contentSize.height 时更新它的常量
self.viewHeightConstraint.constant = self.scrollView.contentSize.height;
无论您在哪里更新滚动视图的内容大小。我想说,在使用自动布局时,设置或更新约束通常比设置框架更好。设置框架往往会与布局引擎发生冲突。
通过选中“等高”框找到您设置的约束。选中“高度”框,为其创建一个 IBOutlet。
【讨论】:
完美运行,我不知道我们可以制作带有约束的 IBOutlet !谢谢。 编辑:不幸的是,我遇到了一个我不太了解的约束问题:<NSLayoutConstraint:0x7f95f8d290d0 UIView:0x7f95f8dcae60.centerY == UIScrollView:0x7f95f9830000.centerY>", "<NSLayoutConstraint:0x7f95f8dcae10 UIView:0x7f95f8dcae60.height == UIScrollView:0x7f95f9830000.height + 808>", "<NSLayoutConstraint:0x7f95f8dc4140 V:|-(0)-[UIView:0x7f95f8dcae60] (Names: '|':UIScrollView:0x7f95f9830000 )>
当您为视图添加显式高度约束时,您是否删除了滚动视图的相等高度? “<0x7f95f8dcae10 uiview:0x7f95f8dcae60. uiscrollview:0x7f95f9830000.height>0x7f95f8dcae10>
【参考方案2】:
有办法解决这个问题。
听听UIScrollView
的contentSize
的变化。
当 contentsize 发生变化时,您会抓住它并更改子视图的框架(高度,宽度..)
像这样:
[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
【讨论】:
以上是关于为啥我在 ScrollView 中的 UIView 不遵守它的高度限制?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 scrollView.frame = CGRectMake() 不起作用
UIView 和 ScrollView 之间的 UIView 过渡翻转
为啥我在 UITableCellView 中的 UIView 中的 UILabel 在正确的数据库调用后没有更新(似乎与单元重用有关)?