UiScrollView 高度不正确(没有 AutoConstraint)
Posted
技术标签:
【中文标题】UiScrollView 高度不正确(没有 AutoConstraint)【英文标题】:UiScrollView Incorrect Height (Without AutoConstraint) 【发布时间】:2016-07-14 13:50:58 【问题描述】:在堆栈溢出方面进行了很多搜索,但没有找到任何适合我们的解决方案。
我们有几个视图和UILabels
和UIButtons
UIScrollView
格式如下。单击按钮时,我们隐藏了几个视图和标签并尝试重新计算UIScollView
高度。
UIScrollView
-->UIView
-->UIView2
-->UIView3
-->UILabel1
-->UILabel2 (请注意这些标签不在UIView
内,它们直接添加到scrollview
。这是正确的方法还是应该将它们添加到UIView
内? )
-->UITextField(直接添加到scrollview)
-->UITextField1(直接添加到scrollview)
-->UIButton(点击textfields
上方的按钮,标签根据业务逻辑隐藏或显示)
当我们尝试在UIButton
上重置UIScrollview
的大小时,单击它不会正确计算高度。在堆栈溢出中尝试了以下由许多答案共享的解决方案
-
标签和按钮直接添加到
UIScrollView
有问题吗?
有没有更好的方法来正确设置UIScrollview
的高度?
我们不想使用AutoConstraint
CGRect contentRect = CGRectZero;for (UIView *view in uiScrollViewObj.subviews)
contentRect = CGRectUnion(contentRect, view.frame);
uiScrollViewObj.contentSize = contentRect.size;
【问题讨论】:
你是想改变内部内容的高度,还是滚动视图本身的高度? 改变uiScrollView的高度 uiScrollViewObj.contentSize 改变了可以滚动的内部区域的大小,并且不改变scrollview的高度,你必须改变scrollview的frame。 让我试试。有没有可以分享的例子 这是我在获取内容大小后尝试的方法.. 没有奏效。现在我什至无法滚动 uiScollviewObj.frame = CGRectMake(10, 20, viewWidth, contentRect.size.height); 【参考方案1】:-
不,不是,实际上 UILabel 和 UIButton 是 UIView。
我认为您混淆了两个概念。 UIScrollView 高度是视口的高度(滚动视图的可见部分)。您要更改的是 contentSize 高度,即您要滚动的整个内容的高度(我不知道我是否解释清楚)。
如果结构是你说的那样,那么 UIButton 是最接近按钮的元素,你应该移动它的框架并将它放在上面,否则 contentSize 总是一样的。
除此之外,您的代码正在遍历滚动视图的所有视图,这些视图不仅是您添加的视图,还有 Apple 插入的视图。
【讨论】:
感谢您的回复。我想过手动做,但认为可能有简单的方法来实现这一点,但我错过了。我试试看 因此问题已通过手动循环遍历所有子视图元素并设置 contentSize 来解决。感谢您的回复【参考方案2】:动态计算 contentsize 的最佳方法是将滚动视图子视图的 y 位置和它们的高度相加。像这样的东西应该可以工作:
CGFloat viewY, maxY=0;
for (UIView *view in uiScrollViewObj.subviews)
if (view.hidden) continue;
viewY = view.frame.origin.y + view.frame.size.height;
maxY = (viewY > maxY) ? viewY : maxY;
[uiScrollViewObj setContentSize:CGSizeMake(uiScrollViewObj.frame.size.width, maxY)];
【讨论】:
感谢您的回复。尝试了上面的代码,如果我们隐藏视图,它不会降低高度。下面有额外的滚动 编辑了上面的代码以不包括隐藏的视图。现在不应出现额外的滚动条。 因此问题已通过手动循环遍历所有子视图元素并设置 contentSize 来解决。感谢您的回复。我很困惑为什么你给出的解决方案不起作用。这说得通。 uiScollView 有 bug 吗? 嗯,这正是上面代码所做的,循环遍历子视图并设置 contentSize。无论如何,很高兴您找到了解决方案! :)以上是关于UiScrollView 高度不正确(没有 AutoConstraint)的主要内容,如果未能解决你的问题,请参考以下文章