Swift 涉及 view 嵌套和页面滚动的问题(50 元红包求思路)

2018-08-07 14:44:39 +08:00
 jamfer
页面布局是这样的:

1.最上面是一个高度 250 的 UIView 层
2.接下来是一个高度 100 的 UICollectionView 层(导航栏)
3.之后是一个高度 200 的 UIScrollView 层(横向滚动)
4.最后是一个高度不确定的 UITableView 层(高度不确定,用 SnapKit 来约束高度)

现在问题来了:

a.我整个 class 用 UIViewController,不行,页面不滚动。
b.四个元素外面再嵌套一个 UIScrollView,也不行,虽然可以滚动了,但是 4. 部分会自己滚动(在自己的那部分范围里滚)
c.整个 class 用 UITableViewController 然后用 tableView.contentInset 来偏移纵坐标,然后把 1.2.3. 部分插入偏移的那一部分,滚动虽然完美了,但是进入页面的时候 offset 不在页面顶部...(会定位在表格开始的部分)
d.我考虑整个 class 用 UITableViewController,设定 4 个 cell,然后再在每个 cell 里分别插入 1.2.3.4.,但是我不会 UITableView 嵌套...

我现在需要进入页面的时候 offset 在最顶部,并且只有一个滚动条。请问我该怎么做?(只说思路就可以了)

如果能提供思路并且解决问题,我会给你发 50 元红包,聊表谢意。
921 次点击
所在节点    问与答
6 条回复
Deffi
2018-08-07 15:12:58 +08:00
两个思路:

简单点的:1,2,3 做到一个 UIView 里,然后把这个 view 设置为 UITableView tableHeaderView

另外一种就是你说的 1,2,3 看作 cell,cell 就是一个 UIView
Deffi
2018-08-07 15:19:13 +08:00
我说的第一个类似你说的 c
jamfer
2018-08-07 15:19:59 +08:00
@Deffi 非常感谢,我马上去实践一下你说的第一点,顺便麻烦留一下微信 code,我给你发红包
jamfer
2018-08-07 15:25:52 +08:00
@Deffi 实现了,再次感谢,看到微信马上发红包。

顺便多问一句,如果要在 tableviewcell 的中间插入一个其他 view 要怎么做最好?我现在是

if(indexPath.row == 3){
插入其他 view
}else{
正常显示 cell
}

虽然能实现,但是 row == 3 的这个 cell 就消失不见了(被取代了)
finab
2018-08-07 15:37:12 +08:00
UTTableView 最好能“数据驱动”

cellForRow 方法这样实现
数据 A 返回 CellA
数据 B 返回 CellB
数据 C 返回 CellC

这样你要做的就是 给 dataSource 一个数组 [数据 A,数据 B,数据 C,数据 B,数据 A ...]
操作排列顺序或隐藏增加某些东西 , 只需要操作这个数组就行了

这个小技巧简单实用,并且能让你的 UITableView 优雅灵活好管理,当有新功能时,也不会影响到之前的代码
4 楼问的问题,用这种方法就很简单的实现了,
Deffi
2018-08-07 15:39:29 +08:00
微信号:RGVmZmlf ( Base64 )

cell 不一定都是一样的 UIView,只要处理好 row 与数据的关系就行

按你的方法,row > 3 时,row - 1 去取数据就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/477617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX