SwiftUI 列表行分隔符样式无法在导航中正常工作

Posted

技术标签:

【中文标题】SwiftUI 列表行分隔符样式无法在导航中正常工作【英文标题】:SwiftUI list line separatorStyle not work correctly with navigation 【发布时间】:2019-12-10 03:55:19 【问题描述】:

我尝试在 2 个视图上隐藏和显示分隔线 我实现的第一个视图如下

struct FirstView: View 
   var body: some View 
      NavigationView
         VStack
            List
               Text("test1")
               Text("test2")
            
            .onAppear UITableView.appearance().separatorStyle = .none
            .onDisappear  UITableView.appearance().separatorStyle = .singleLine 
            NavigationLink(destination: NextView()) 
                Text("next view")
            
         
      .navigationViewStyle(StackNavigationViewStyle())
   

这将在 FirstView 上不显示任何行。 当导航到也有列表的 NextView 时,不会显示单独的行。 之后导航回 FirstView 显示单独的行。

struct NextView: View 
   var body: some View 
      List
          Text("test1")
          Text("test2")
       
   

我不确定是这个错误还是我在某处编码错误。

【问题讨论】:

您是否尝试在 NextView 列表中添加 .onAppear UITableView.appearance().separatorStyle = .singleLine 我尝试添加它并显示行分隔符,但是当导航回 firstView 行分隔符时仍然显示。 这里使用了未记录的解决方法(访问内部 UITableView),带有未记录的假设(onAppear/onDisappear 的行为),那么为什么它的行为应该符合预期,因为它是有问题的?只是想... 如果是这种情况,隐藏分隔线的正确方法是什么? 【参考方案1】:

列表出现之前在代码中的任何位置添加UITableView.appearance().separatorColor = .clear 应该可以工作。

    init() 
    // To remove only extra separators below the list:
    UITableView.appearance().tableFooterView = UIView()

    // To remove all separators including the actual ones:
    UITableView.appearance().separatorStyle = .none


var body: some View 
    List 
        Text("Item 1")
        Text("Item 2")
        Text("Item 3")
    

【讨论】:

问题是当导航回到 firstview 时,分隔线仍然出现。 @AchiraTrakansutleart 比你应该使用清晰的颜色

以上是关于SwiftUI 列表行分隔符样式无法在导航中正常工作的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI嵌入Stack样式导航视图(NavigationView)中List显示怪异的解决

SwiftUI - 列表行分隔符插入,如 iOS 设置应用程序

如何着色/删除 SwiftUI 列表中最后一行和倒数第二行之间的分隔符?

如何隐藏 SwiftUI 列表分隔符 [重复]

SwiftUI - 使列表分隔线扩展到触摸屏边缘

为啥我的 SwiftUI 列表分隔符没有正确排列?