【问题标题】:Autolayout with multiple containerView's of dynamic heigth in a UIScrollView在 UIScrollView 中具有多个动态高度的容器视图的自动布局
【发布时间】:2016-08-27 20:15:32
【问题描述】:

几周以来,我一直在这个问题上大发雷霆。在尝试了所有可能的NSLayoutConstraint 组合之后,我知道是时候问你们了:)

我的 MainViewController 有几个部分,用于新闻、朋友、个人资料等,就像用户活动的摘要页面一样。我想将这些不同的部分实现为单独的ViewControllers,否则它将混合苹果和梨。正确的?显然这些需要放在UIScrollView 内,因为它们会比屏幕高度长。

让一切变得更加困难的是,这些childViewControllers 的高度是可变长度的,并在运行时根据从服务器下载的内容决定。

您能否指导我制定有关如何构建此设计的正确策略?我想使用故事板。如果不可能,我也可以在代码中完成所有操作。我认为棘手的部分是设置MainViewController 的子视图的正确约束(UIScrollViewUIViewUIContainerView)并以某种方式在适当的位置传递ChildViewControllers 的高度。

我也很惊讶关于这个主题的信息如此之少。我一直认为这种设计在应用中一定很流行。

【问题讨论】:

  • 我认为您应该在这些视图上设置固定高度约束,并根据您的需要更改该约束的常量值。
  • 听起来你需要 UIStackView。它会根据内容的内在大小自动调整内容大小,甚至会为更改设置动画。你也可以把它放在 UIScrollView 中。
  • @almas 所以你说我应该为 childVCs 创建 IBOutlet 高度约束(它们需要占位符约束吗?)我将在哪里更新约束?在 childVC 的服务器调用中?
  • @Clafou 我会在您发表评论后查看UIStackViews。但是由于iOS 9.0之前不支持,所以目前是我不得已的办法

标签: ios uiscrollview autolayout storyboard uicontainerview


【解决方案1】:

根据我使用UIScrollView 的经验,在几乎 99% 的情况下,我不会推荐它们。它们很难与自动布局一起使用,并且很容易被微小的更改破坏。它们在 IB 中使用也非常烦人,因为您无法滚动其内容。

对于这个设计,我宁愿使用带有静态单元格的UITableView(基于您的视图将包含每个项目/人的相同信息的假设);每个都包含一个用于不同视图控制器的容器视图。

这意味着您不必太担心自动布局,并且您的单元格应该会在内容发生变化时自动调整大小。

【讨论】:

    猜你喜欢
    • 2015-02-03
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    相关资源
    最近更新 更多