【问题标题】:Extra padding above table view headers in iOS 15iOS 15 中表格视图标题上方的额外填充
【发布时间】:2021-09-10 06:29:27
【问题描述】:

如何更改 iOS 15 中已开始出现的 UITableView 部分标题上方的额外填充?

【问题讨论】:

    标签: ios uitableview ios15


    【解决方案1】:

    从 iOS 15 开始,UITableView 包含一个名为 sectionHeaderTopPadding 的新属性,它指定每个节标题上方的填充量。

    tableView.sectionHeaderTopPadding = 0.0
    

    【讨论】:

    • 每个部分都可以这样做吗?
    • 为什么不应该将其默认设置为 0?在将我的应用程序迁移到 SDK 15 时,我已经摸不着头脑了一个小时
    • @FabioNapodano 显然这是因为 iOS 15 中标题的新默认外观。文本等的默认偏移量也不同。
    • 是否有人遇到过此代码无法在 Xcode 12 上编译的问题,即使您将其包装在 if #available(iOS 15.0, *) 中?
    • @dcaraujo 您需要使用 Xcode 13.x 才能使用 tableView.sectionHeaderTopPadding 属性。
    【解决方案2】:

    用于在应用程序的任何地方应用更改

    if #available(iOS 15.0, *) {
        UITableView.appearance().sectionHeaderTopPadding = 0.0
    }
    

    最好是AppDelegate

    【讨论】:

      【解决方案3】:

      将这个放在主要的 didFinishLaunchingWithOptions 中以全局修复它:

      if (@available(iOS 15.0, *))
      {
          UITableView.appearance.sectionHeaderTopPadding = 0;
      }
      

      【讨论】:

      • if #available(iOS 15.0, *) { UITableView.appearance().sectionHeaderTopPadding = 0 }
      • @Aace 首先在这里建议了这个全局修复,因此 +1;
      • iOS 15 中还有其他类似的惊喜吗?
      • @matt Point 已被采纳,但我没有看到任何专门针对此问题或 iOS 15 的会议,而且我看的太多了。你能推荐一两个特定的会话吗?
      • 如果引入这样一个新属性,为什么不将其默认为 0.0 以使其向后兼容?您不应该期望每个开发人员都知道操作系统版本之间的每一个细微变化,这太疯狂了。
      【解决方案4】:

      obj-c 的全局方式:

      if (@available(iOS 15.0, *)) {
          [[UITableView appearance] setSectionHeaderTopPadding:0.0f];
      }
      

      【讨论】:

        【解决方案5】:

        Objective C 版本可以使用下面的代码;

        if (@available(iOS 15.0, *)) {
                [_tableViewC setSectionHeaderTopPadding:0.0];
                
        };
        

        其中 tableViewC 是目标表视图。

        【讨论】:

        • 或者在所有地方修复,if (@available(iOS 15.0, *)) { [[UITableView appearance] setSectionHeaderTopPadding:0.0]; };
        【解决方案6】:

        把这个放在主要的didFinishLaunchingWithOptions中全局修复它

        if (@available(iOS 15.0, *)) {
            [[UITableView appearance] setSectionHeaderTopPadding:0.0f];
        }
        if #available(iOS 15.0, *) {
            UITableView.appearance().sectionHeaderTopPadding = 0.0
        }
        

        【讨论】:

          【解决方案7】:

          对于 Xamarin Forms,您可以在 FinishedLaunching 中的 LoadApplication 调用之后添加以下代码:

          if(UIDevice.CurrentDevice.CheckSystemVersion(15, 0))
          {
              void_objc_msgSend_nfloat(UITableView.Appearance.Handle, ObjCRuntime.Selector.GetHandle("setSectionHeaderTopPadding:"), 0);
          }
          

          我错过了版本检查,并且应用程序在低于 iOS15 的任何设备上崩溃,而没有通过 TestFlight 获得崩溃报告。

          【讨论】:

            猜你喜欢
            • 2021-10-26
            • 2021-11-26
            • 1970-01-01
            • 2021-11-11
            • 1970-01-01
            • 2021-11-14
            • 2021-11-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多