V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jamfer
V2EX  ›  问与答

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

  •  
  •   jamfer · 2018-08-07 14:44:39 +08:00 · 922 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。
    页面布局是这样的:

    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 元红包,聊表谢意。
    Deffi
        1
    Deffi  
       2018-08-07 15:12:58 +08:00   ❤️ 1
    两个思路:

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

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

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

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

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

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

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

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

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

    按你的方法,row > 3 时,row - 1 去取数据就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5953 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 06:10 · PVG 14:10 · LAX 22:10 · JFK 01:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.