UiScrollView不正确的高度(没有自动约束)

时间:2016-07-14 13:50:59

标签: ios objective-c uiview uiscrollview uilabel

搜索堆栈溢出很多,但没有找到适合我们的解决方案。

我们所拥有的是几个观点以及UILabels中的UIButtonsUIScrollView格式如下。点击按钮,我们隐藏了几个视图和标签,并试图重新计算UIScollView高度。

UIScrollView

- > UIView的

- > UIView2

- > UIView3

- > UILabel1

- > UILabel2 (请注意这些标签不在UIView内,它们会直接添加到scrollview。这是正确的做法还是应该添加到内部一个UIView?)

- > UITextField(直接添加到滚动视图)

- > UITextField1(直接添加到滚动视图)

- > UIButton (点击textfields上方的按钮,并根据业务逻辑隐藏或显示标签)

当我们尝试重置UIScrollviewUIButton的尺寸时,请点击它并不能正确计算身高。尝试下面的堆栈溢出中很多答案共享的解决方案

  1. 标签和按钮的问题是否直接添加到UIScrollView
  2. 有没有更好的方法来正确设置UIScrollview的高度?
  3. 我们不想使用AutoConstraint

     CGRect contentRect = CGRectZero;for (UIView *view in uiScrollViewObj.subviews) {
        contentRect = CGRectUnion(contentRect, view.frame);
    }
    uiScrollViewObj.contentSize = contentRect.size;
    

2 个答案:

答案 0 :(得分:0)

  1. 不,不是,实际上UILabels和UIButtons都是UIViews。
  2. 我认为你混淆了两个概念。 UIScrollView高度是视口的高度(scrollview的可见部分)。你想要改变的是contentSize高度,它是你要滚动的整个内容的高度(我不知道我是否已经解释清楚了)。
  3. 如果结构是你说的那样,那么UIButton是最接近按钮的元素,你应该移动它的框架并将它放在上面,否则contentSize总是一样的。

    除此之外,您的代码正在遍历scrollview的所有视图,这些视图不仅是您添加的视图,还包括Apple插入的视图。

答案 1 :(得分:0)

动态计算内容大小的最佳方法是对滚动视图子视图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)];