iOS 7 - 布局建议

new*_*bie 18 objective-c uiscrollview ios autolayout uicollectionview

我的视图控制器中有以下布局.我希望能够垂直滚动,标题滚动视图,UISegmentedControl粘贴到视图的顶部,除此之外,剩余的滚动应该由Collection View处理.

但是我对实现这种布局的最佳方法有点困惑.

布局

我尝试了一些混合结果的实现:

  1. UIScrollView使用UICollectionView作为子视图: UIScrollView作为父视图,标题,分段控件和集合视图作为子控件.这种方法的问题是嵌套滚动似乎无法正常工作.为了能够滚动UIScrollView,水龙头需要在CollectionView区域之外,否则只有CollectionView滚动并且标题和分段控件不会移动.

  2. 标题单元格中的标题和分段控制:我尝试使用单个CollectionView的另一种方法.我添加了标题和分段控件作为集合视图的单个标题单元格的子视图.当分段控件值更改时,我切换CollectionView的数据源属性以实现集合视图所需的3个视图.视觉上一切都很完美.这里唯一的问题是在第一,第二和第三个标签之间快速切换时的竞争条件.我从Web服务加载数据,如果Web服务需要时间并且仍在加载数据并且我快速切换选项卡然后我遇到错误,其中返回的数据是针对与当前选择的不同的集合视图,很多无序同步问题.

  3. 更新Autolayout Constraint的常量值: 我尝试的另一种方法是更改​​应用于"Header"视图的自动布局约束的常量值.然后我向视图控制器的视图添加了一个手势以跟踪滚动,因为用户垂直滚动我调整自动布局约束的常量,以便"标题"单元格弹出视图.这似乎并不顺利,但我想我可以调整它,但它似乎有点像黑客.

有没有更好的方法来实现这种布局?

jtb*_*des 9

#2似乎是一个很好的解决方案 - 滚动手势将与用户期望的最一致,因为它只是一个滚动视图.(我同意#3听起来像是一个黑客.)你可以使用一些自定义布局属性使标题"粘滞" .

这里唯一的问题是在第一,第二和第三个标签之间快速切换时的竞争条件.

这是在切换视图时异步加载的常见问题(特别是当您将数据加载到单个单元格中时,这些单元格在滚动时会被重复使用).重要的是,在收到数据后,您总是要检查接收器是否仍然在期待它; 即,您应该在更改后备数据源之前检查分段控制值.你也可以:

  • 为不同的段使用单独的数据源对象,让每个段都管理自己的数据提取,这样它们就不会混淆.
  • 如果可以,在快速切换选项卡时取消未完成的请求,以避免不必要的网络请求.
  • 缓存数据以避免每次切换选项卡时重新获取.


Jat*_* JP 2

我认为您想要pinterest个人资料页面具有的相同功能。要轻松实现此类功能,您需要执行以下操作。

步骤1:将UIView添加为向上滚动时炫耀的tableHeaderView。

self.tableHeaderView = yourView
Run Code Online (Sandbox Code Playgroud)

第 2 步:添加UISegmentControl节标题视图。

 - (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section{
  return your_segmentcontrolView;

}
Run Code Online (Sandbox Code Playgroud)

步骤 3:添加UICollectionView到第一部分的第一行。

通过实施以下方式,您可以获得您想要的功能。

希望这对您有帮助。

  • 我不喜欢用户要求OP向他们授予赏金,因为虽然你的答案**可能**有帮助,但问题可能有更好的答案。从我个人的角度来看,我认为这并不能完全回答问题,如果是我,我会说需要更多的描述才能获得 200 名代表。诸如“1jbandes”之类的描述将是我希望在奖励赏金之前看到的描述类型。 (2认同)