iOS 7 - 布局建议

标签 ios objective-c uiscrollview autolayout uicollectionview

我的 View Controller 中有以下布局。我希望能够垂直滚动,标题滚出 View ,UISegmentedControl 粘在 View 顶部,除此之外,其余滚动应由 Collection View 处理。

但是,对于实现此布局的最佳方法是什么,我有点困惑。

Layout

我尝试了一些结果喜忧参半的实现:

  1. UIScrollView with UICollectionView 作为 subview :UIScrollView 作为父 View ,带有标题、分段控件和 Collection View 作为子控件。这种方法的问题是嵌套滚动似乎不能正常工作。为了能够滚动 UIScrollView,点击需要在 CollectionView 区域之外,否则只有 CollectionView 滚动,而标题和分段控件不会移动。

  2. 标题单元格中的标题和分段控件:我尝试了另一种方法,即使用单个 CollectionView。我将标题和分段控件添加为 Collection View 的单个标题单元格的 subview 。当分段控件值改变时,我切换CollectionView的数据源属性来实现 Collection View 所需的3个 View 。视觉上一切都完美无缺。这里唯一的问题是在第一、第二和第三选项卡之间快速切换时的竞争条件。我从网络服务加载数据,如果网络服务需要时间并且仍在加载数据并且我快速切换选项卡然后我遇到错误,其中返回的数据用于与当前选择的不同的 Collection View ,很多乱序同步问题。

  3. 更新自动布局约束的常量值:我尝试的另一种方法是更改​​应用于“页眉” View 的自动布局约束的常量值。然后,我向 View Controller 的 View 添加了一个手势来跟踪滚动,当用户垂直滚动时,我调整自动布局约束的常量,以便“标题”单元格弹出 View 。同样,这似乎并没有那么顺利,但我想我可以对其进行调整,但它似乎有点 hack。

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

最佳答案

#2 似乎是一个很好的解决方案——滚动手势将最符合用户的期望,因为它是一个单一的 ScrollView 。 (我同意 #3 听起来像是 hack。)你可以用一些 custom layout attributes 使标题“粘”。 .

The only problem here is the race condition when switching quickly between first, second and third tabs.

这是切换 View 时异步加载的常见问题(尤其是当您将数据加载到单个单元格中时,这些单元格会在您滚动时重复使用)。重要的是,在收到数据后,您始终检查接收方是否仍在期待它;即,您应该在更改支持数据源之前检查分段控制值。您还可以:

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

关于iOS 7 - 布局建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30723464/

相关文章:

iphone - 如何使用 cgcontext 引用动态地将 100 X 100 图像制作为 1000X 1000

ios - 在后台线程中创建 View Controller

ios - 如何在 Swift 中更改 UICollectionView 的 targetContentOffset?

ios - 滑动 View 就像iOS中的whatsapp(android)

ios - 使用 NSPredicate 在类似于 SQL WHERE IN 子句的 NSArray 中查找元素

ios - 将 CBCharacteristic 值转换为字符串

iOS:使用哪种增强现实 SDK 用于虚拟试衣间?

ios - 在没有苹果证书的情况下发布内置于 Flash Builder 4.5 中的 iOS 移动应用程序

IOS 在 "Bundle React Native code and images"部分无限期地构建堆栈

ios - trigger.io 中的自定义 URL 方案