【问题标题】:Make subview of a UIScrollView fixed while the other subviews scrollable固定 UIScrollView 的子视图,而其他子视图可滚动
【发布时间】:2011-01-27 15:07:34
【问题描述】:

我想制作一个视图,其中三个子视图相互堆叠,中间子视图可滚动,其他子视图固定。

如何以编程方式实现这一目标?我试过了

  • 将根视图的 contentsize 设置为可滚动视图的大小,但这会使所有视图滚动。

-设置中间子视图的内容大小,而不为根视图设置任何属性,但这会使所有视图都不可滚动。

请帮忙。我是 iOS 新手。

提前致谢

【问题讨论】:

    标签: objective-c ios uiscrollview


    【解决方案1】:

    您可以使用UIScrollView 上的scrollViewDidScroll: 委托回调来调整视图的位置。在回调中,获取滚动视图的contentOffset 并使用它来设置固定视图的位置。

    例如,如果您希望固定视图始终保持距离滚动视图顶部 100 像素,请将其初始帧设置为 (0, 100, width, height),然后在回调中将帧设置为 (0 , contentOffset.y + 100, 宽度, 高度)。

    结果是子视图将固定在给定的高度。

    【讨论】:

    • 谢谢!那行得通。只是我的滚动视图需要水平滚动,所以我更新了委托中框架的 x 坐标。
    • 没问题!我以为你在做垂直滚动——很高兴一切顺利。
    • 酷。我检查了一下,这似乎正是 UITableView 自 iOS 3.2 以来对 backgroundView 所做的。
    • 它可以与 tableview 中的附加列一起使用,这很酷,但是我的视图(标签)有问题,我想要修复的元素保持在它的位置,但它被移动覆盖了滚动视图中的视图,知道会发生什么吗?
    • 您需要使用[self.view bringSubiewToFront:label] 之类的方式将它们移动到这些视图的前面。
    【解决方案2】:

    如果您的 UIScrollView 有一个超级视图(即容器视图),您可以将您的“固定”视图添加为超级视图的子视图,而不是 UIScrollView。您只需计算一次框架坐标。

    【讨论】:

      【解决方案3】:

      您可以将子视图从 UIScrollView 移动到滚动视图的超级视图,例如:

      将您的按钮放置/设置在滚动视图上(不在滚动视图内),如此处快照所示。并且还针对滚动视图的超级视图设置按钮约束(位置)。

      这里是参考。每个视图的位置层次结构快照。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 2011-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多