首页 文章

UIScrollView扩展内容的内部大小,直到高度X,然后滚动

提问于
浏览
11

我基本上试图重现警报的 Headers 和消息部分的行为 .

enter image description here

Headers 和消息标签似乎位于滚动视图中 . 如果标签文本增加,则警报高度也随着标签的固有内容大小而增加 . 但在某个高度,警报高度停止增加, Headers 和消息文本变为可滚动 .

What I have read:

用品

堆栈溢出

答案可能在那里,但我无法抽象它 .

What I have tried:

我只关注具有两个标签的滚动视图,我试图做一个最小的例子,其中父视图将根据scrollview的内在高度调整大小 . 我玩过很多限制 . 这是一个组合(许多)组合不起作用:

enter image description here

我曾与auto layoutnormal constraints甚至intrinsic content sizes合作过 . 另外,我知道how to get a basic scroll view working with auto layout . 但是,我已经完成了,我对它们的含义有一种肤浅的理解,但我在这种情况下无法应用它们 . 我的猜测是我需要对内容拥抱和优先级做些什么 .

3 回答

  • 1

    我想我已经达到了与纯自动布局相似的效果 .

    THE STRUCTURE

    首先,让我告诉你我的结构:

    enter image description here

    内容视图是具有白色背景的视图,来电者视图和底部视图具有固定的高度 . 底部视图有您的按钮,来电者视图有您的 Headers .

    THE SOLUTION

    因此,在设置基本约束之后(请注意滚动视图内部的视图具有滚动视图的顶部,左侧,右侧和底部以及相等的宽度),问题是滚动视图不知道应该具有的大小 . 所以这就是我所做的:

    我希望卷轴可以增长到最大值 . 所以我在superview中添加了一个比例高度来设置最大值:

    enter image description here

    但是,这会带来两个问题:Scroll View仍然不知道应该具有什么高度,现在您可以调整大小,滚动视图将传递其内容的大小(如果内容小于最大大小) .

    所以,为了解决这两个问题,我从滚动视图的内部视图和滚动视图中添加了一个相等的高度 with a smaller priority

    enter image description here

    我希望这可以帮助你 .

  • 11

    单独的约束无法解决您的问题,您必须使用一些代码 . 那是因为滚动视图没有内在的内容大小 .

    因此,创建滚动视图的子类 . 也许给它一个 property 或代表或者什么来告诉它最大高度应该是多少 .

    在子类中,每当内容大小更改时,使内在内容大小无效,并将新的内在大小计算为内容大小的最小值和允许的最大大小 .

    一旦滚动视图具有内在大小,它与其超级视图之间的约束实际上将对您的问题执行一些有意义的操作 .

  • 5

    您应该能够通过纯自动布局实现此解决方案 .

    通常,如果我希望标签随着内容的垂直增长而增长,我会这样做

    [label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal]; 
    [label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
    

    为了使您的滚动视图符合您的要求,您需要确保可以绘制一条线,将滚动视图的顶部一直连接到滚动视图的底部,以便计算它的高度 . 为了使scrollview限制为它的父级,你可以设置一个高度约束,其中superview的乘数为0.8 .

相关问题