V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq432591
V2EX  ›  iOS

iOS 目前这种视图构造结构的 都是如何实现的呢? ScrollView 的嵌套?

  •  
  •   qq432591 · 2017-08-25 10:33:43 +08:00 · 4145 次点击
    这是一个创建于 2429 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ![]( )

    类似于今日头条的文章详情页。底部一个 main_ScrollView 里面嵌套有 webView+TableView 视图,在同方向上 如何处理滚动的情况呢?有了解的么????

    ![]( )
    这种主页的搭建 大多也是这种类似结构,那么底部的 main_ScrollView 如何将他作为一个容器来处理呢?
    20 条回复    2017-08-25 17:09:32 +08:00
    0nlyy0u
        1
    0nlyy0u  
       2017-08-25 10:40:20 +08:00
    这是怎么做到的。越狱了?
    qq432591
        2
    qq432591  
    OP
       2017-08-25 10:41:29 +08:00
    恩,是的!
    zylll520
        3
    zylll520  
       2017-08-25 10:42:40 +08:00
    很简单吧
    main_ScrollView:scrollEnable = YES; contentSize.height = webView.contentSize.height +TableView.contentSize.height

    webView.scrollEnable = NO;
    TableView.scrollEnable = NO;

    然后在 scrollDidScroll 的代理方法里面不断更改 webView/TableView 的 frame.y 和 contentOffset.y 就可以了
    qq432591
        4
    qq432591  
    OP
       2017-08-25 10:44:57 +08:00
    @zylll520 webView 的 height 可以设置为其 contentSize.height 高度,切不滚动,但是下边的 tableview 的你如果不让他滚动的话 不断的改变其高度 那复用怎么办??????
    zylll520
        5
    zylll520  
       2017-08-25 10:49:06 +08:00
    @qq432591 不管是 webView 还是 tableView,高度最多也就是 main_ScrollView.freme.size.height,不能是 contentSize.height,原因你可以想想
    qq432591
        6
    qq432591  
    OP
       2017-08-25 10:56:02 +08:00
    @zylll520 但是我通过 reveal 里面看到 他们的 Frame 是没有变化的。
    qq432591
        7
    qq432591  
    OP
       2017-08-25 11:00:41 +08:00
    @zylll520 恩 ,刚有仔细观察 的确如你所说,那思路有了我去尝试下将其复现出来
    qq432591
        8
    qq432591  
    OP
       2017-08-25 11:04:35 +08:00
    @zylll520 感觉 在 scrollDidScroll 里面改不太准确吧 KVO 监听 main_ScrollView 的 offset.y ?
    renshaojuncool
        9
    renshaojuncool  
       2017-08-25 11:07:14 +08:00
    webview 是 tableview 的 header,通过 js 拿到 webview 渲染完成后的高度就可以了吧,我以前是这么写的,没什么问题
    shore507
        10
    shore507  
       2017-08-25 11:12:00 +08:00 via iPhone
    @renshaojuncool 我也这么干过
    zylll520
        11
    zylll520  
       2017-08-25 11:23:47 +08:00
    @renshaojuncool 从 webView 的渲染原理上说,你这种方法在网页内容高度很高 /图片很多的时候应该会有奔溃的可能吧
    qq432591
        12
    qq432591  
    OP
       2017-08-25 14:58:40 +08:00
    @zylll520 这个在 scrollDidScroll 里面 直接设置 subScrollView 的 setContentOffset 动画 会一卡一卡的 这该如何处理 ? KVO 监听的话 也是同样的问题!
    zjmdp
        13
    zjmdp  
       2017-08-25 15:09:06 +08:00
    最外层一个 UITableView,section 1 就一个 cell,cell 里放一个 UIWebView,高度即 webView.contentSize.height (需要监听 webView 的 contentSize 的变化),section 2 就加载评论内容
    qq432591
        14
    qq432591  
    OP
       2017-08-25 15:11:48 +08:00
    @zjmdp 但是 你没有发现现在很多 APP 主页 都可能是一个比较复杂的结构么? 总不能说明东西都用 tableView 来搞吧,现在的问题就是如何将一个 ScrollView 当做一个容器来处理 ,里面可以添加任何控件。这样会好点吧,但问题主要就是在于如何处理滑动问题
    zjmdp
        15
    zjmdp  
       2017-08-25 15:12:21 +08:00
    当然我提到的这种做法和截图不太一致,但是感觉也可行
    zjmdp
        16
    zjmdp  
       2017-08-25 15:13:59 +08:00
    @qq432591 为什么不行呢?多几个 section 不就行了,感觉逻辑上更清楚啊,甚至还有 tableHeaderView 可以用呢,特别是顶部放一些 banner 和分类用 tableHeaderView 再合适不过了
    qq432591
        17
    qq432591  
    OP
       2017-08-25 15:16:16 +08:00
    @zjmdp 就是想知道他们是如何做到的, 因为苹果文档也是 不建议 去 scrollView 嵌套 scrollView 这种操作,但是人家可以做到这样来搞 肯定是有一定理由的, 而且感觉他们这样搞起来的话 代码层面也会逻辑清晰一点吧。毕竟视图都分成不同的视图了,管理起来应该会比用一个 tableView 好点!
    zylll520
        18
    zylll520  
       2017-08-25 15:20:50 +08:00
    @qq432591 animated: NO
    qq432591
        19
    qq432591  
    OP
       2017-08-25 15:34:06 +08:00
    @zylll520 不行 已经试过了
    zylll520
        20
    zylll520  
       2017-08-25 17:09:32 +08:00
    @qq432591 setFrame + setContentOffset:animated:NO 是可以的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5246 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:45 · PVG 15:45 · LAX 00:45 · JFK 03:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.