【问题标题】:Reverse scrollview height controlled by stack view in storyboard由故事板中的堆栈视图控制的反向滚动视图高度
【发布时间】:2021-05-16 14:37:14
【问题描述】:

我的目标

创建一个反向滚动视图,它随着垂直堆栈的高度而改变高度(其内容将以编程方式控制)

我的尝试

将堆栈视图、滚动视图和内容视图设置为相同的高度。我不知道如何用它改变视图控制器的模拟大小

注意:我使用的是 Storyboard 而不是 Swift UI,我对此进行了研究,我能找到的只是有关如何在 SwiftUI 中执行此操作的教程

我希望它由堆栈视图的高度控制,所以当没有任何东西可以滚动时它不会滚动,如果这是错误的,请纠正我并给我一些指导

现在的 ViewController:

谁能帮忙?

【问题讨论】:

  • 什么是“反向”堆栈视图?什么是“反向”滚动视图?
  • 如果直接在滚动视图中的唯一东西是堆栈视图,那么内容视图是做什么用的?堆栈视图应该内容视图。如果将堆栈视图固定到滚动视图的内容指南,则会“从内到外”调整内容的大小,从而提供您想要的效果。
  • 对不起,我只是说反向滚动视图-我不是说堆栈视图,我观看的视频描述了反向滚动视图,即您要查看的内容位于底部然后向上滚动查看较旧的内容(我知道这是一个糟糕的解释,但我想说的是 iMessage 的设置方式)
  • 好吧,我看不出这个“反向”与问题有什么关系。请参阅我之前的评论。
  • 我已经删除了内容视图,但是随着更多的东西被添加到堆栈视图中,我如何使实际页面变得更长,因为我从中学到的教程为视图控制器提供了固定的模拟大小在测量检查器中?感谢您帮助我,我对此很陌生

标签: ios swift xcode storyboard


【解决方案1】:

如果我正确理解您的问题,我最近遇到了类似的问题。
我的解决方案是:

  1. 在超级视图中完全约束 UIScrollview
  2. 在 UIScrollView 中放置一个 UIView。将 UIView 的前导和尾随约束与 UIScrollView 的内容布局指南和框架布局指南(=0,或您需要的任何边距)对齐。将 UIView 的顶部和底部约束与 UIScrollView 的内容布局指南 ( =0 ) 对齐。将 UIView 的高度限制为等于 UIScrollView 的框架布局指南的高度,优先级为 500(确保乘数为 1,因为 Autolayout 可能会将其设置为其他值)。这些约束应该通过控件从 UIView 拖动到文档大纲中的 UIScrollView 的布局指南来添加(如果我没有以这种方式添加它们,我会遇到问题)。这修复了宽度,但如果 UIView 的高度需要扩展,则等高约束可能会中断,允许它在 UIScrollView 的框架之外增长,从而触发滚动。
  3. 将 UIStackView 放在 UIView 中。将 UIStackView 前导和尾随约束与超级视图(UIView)对齐,或使用水平居中的超级视图约束。将 UIStackView 约束为在超级视图(同样是 UIView)内垂直居中。将 UIStackView 的底部约束相对于超级视图 (UIView) 对齐 >=0。因此,当 UIStackView 小于 UIView(和 UIScrollView)时,它保持居中并且不滚动。一旦 UIStackView(和 UIView)超过 UIScrollView 的大小,UIStackView 和 UIView 底部之间的 >=0 约束优先于 UIView 和 UIScrollView 框架布局指南之间的等高约束,从而强制滚动。

在第 3 步中,我认为最好将 UIStackView 的顶部与 UIView 的顶部对齐,而不是让 UIStackView 垂直居中。底部约束仍应 >=0。我自己没有尝试过,但它应该仍然有效。

如果您需要 UIScrollView 本身增加尺寸,则将其在 superview 中的顶部和底部固定为您想要的最小尺寸,优先级较低,例如 250,然后添加 >= 约束以修复外部你希望它在哪里的限制。例如,将 UIScrollView 的底部约束为距底部安全区域指南 =100,优先级为 250,然后将其约束为距底部安全区域 >=25,默认优先级为 1000。在这种情况下要打破的第一个约束应该是 UIScrollView 的底部,这将允许 UIScrollView 增长直到它达到底部 >=25 约束,此时 UIView 到 UIScrollView_frame_layout_guide 等高约束将打破触发滚动。

我希望这是有道理的(并且我没有错过任何事情)!

PS 我还遇到了 UIStackView 内容(在我的案例中以编程方式定义)以奇怪的方式调整大小的问题,这似乎可以通过将内容模式从“缩放到填充”更改为“重绘”来解决。我根据我想要的外观将分布设置为“均等填充”或“按比例填充”(我有两个这样的视图)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2020-12-05
    • 2012-12-06
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多