【问题标题】:Misplaced or hidden UITableView Section Header while switching from one datasource to another and realoding the UITableView从一个数据源切换到另一个数据源并重新加载 UITableView 时,UITableView 部分标题错位或隐藏
【发布时间】:2016-03-03 13:18:38
【问题描述】:

我正在 iOS 上制作个人资料视图,其中包含三个选项卡,例如 twitter 应用程序。 我正在使用一个表格视图,当用户点击这些选项卡时,我正在从其他数据源重新加载它。但是我想保持节标题独立于这些数据源模型的顶部。有什么方法可以实现吗?

有时当用户点击节标题的按钮来切换表视图数据源并再次重新加载时,但节标题视图要么被隐藏,要么从其原始顶部位置放错位置,这是一种奇怪的错误,任何提示发生了什么这里?

编辑:- 一件重要的事情是我在这里也需要刷新。

【问题讨论】:

  • 你能显示一些代码吗?你在使用自定义视图控制器吗?你试过 reloadSections 方法吗?
  • 我不太确定这个布局是什么样子的。能否提供截图?
  • @WolfLink 添加了所需的屏幕截图。
  • @Amir reload 部分会导致奇怪的动画。甚至 AnimationNone 也无济于事。
  • 这里的诀窍是:您需要在滚动视图中跟踪表格视图的偏移量,并使用以下规则设置您的选择器y 位置:tableView.contentOffset.y > 200.0 ? tableView.contentOffset.y : 200.0。这样就可以了。

标签: ios objective-c iphone uitableview


【解决方案1】:

您可以制作一个独特的视图来存储您的部分标题,然后放置控制器的视图头。那可以实现你的目标。

【讨论】:

    【解决方案2】:

    但是我想保持section header独立于这些数据源模型的顶部。有什么方法可以实现吗?

    如果我对您的理解正确,您最好使用table header view property。为什么?因为会给您提供您想要的数据源重新加载的独立性,但保持您从三个控件触发数据源重新加载的能力。

    您也可以按照@WolfLink 的建议,在您的表格视图上方放置一个视图来实现相同的目的。

    这当然取决于您如何使用表格部分。请参阅此 SO question 以将标题视图添加到您的表格视图。


    编辑

    如果您希望当前剖面视图始终位于其超级视图的顶部,那么您应该重新安排您的视图控制器的视图层次结构,以便您的剖面标题视图在表格视图之外实现。

    ViewController 的子视图

            ---> view containing your three buttons(Current section header view)
            ---> table view
            ---> toolbar
    

    这样即使用户滚动表格视图,三键视图仍然会停留在屏幕顶部。


    【讨论】:

    • 我希望选择标题始终保持在顶部,这就是为什么避免将其用作 tableviewheader。
    • tableviewheader(包含 bio、image 和其他统计信息)会像往常一样仅添加到 tableview 中吗?那么如何实现我的初始状态,如第一张截图所示?
    • @kidsid49 您需要确定用于构建完整视图的主要子视图,从您的屏幕截图中不清楚您选择如何实现视图。我个人会将 bio/stats 视图向上移动到截面视图(3 个按钮)中,并在需要时将其扩展为包含 bio/stats 视图,否则您需要查看一些更复杂的动画视图排列跨度>
    • @kidsid49 你有机会发一张正在运行的错误的图片吗?
    • Bug 是部分标题随机放错位置,有时它会出现在 UItableview 的中间顶部。顺便说一句,我只是想避免这么大的视图(正如你所建议的那样)一直坚持我的 UITableview。
    【解决方案3】:

    我认为是滚动问题,我之前也遇到过类似的问题,UITableView 是建立在 UIScrollView 之上的,并且滚动视图有 setContentOffset 方法,重新加载后调用它并将偏移设置为 (0,0)

    【讨论】:

      【解决方案4】:

      你可以使用这个库: https://github.com/toandk/DTTableView

      在例子中,有一个table view DTParallaxTableView 使用标题视图启动:DTParallaxHeaderView 和一个 UIVIew(可以是本示例中的标签栏)。

      如果没有用,您可以禁用视差效果并使用它来启动拉动刷新。

      或在此处搜索并找到与您的用例匹配的那个! https://www.cocoacontrols.com/search?q=pull

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 2012-04-02
        • 2016-01-02
        • 1970-01-01
        相关资源
        最近更新 更多