首页 > 解决方案 > UITableView.appearance().backgroundColor init 基于horizo​​ntalSiceClass

问题描述

我无法使用基于 Horizo​​ntalSizeClass 的 UITableView.appearance().backgroundColor init ->它没有做任何事情,即使与 UIDevice.current.localizedModel 相同的代码工作。

我需要使用 Horizo​​ntalSizeClass,因为这两个类的 UI 略有不同。

您可以在任何 iPhone 中进行纵向预览。当你看到粉红色时,你就明白了(如果它仍然是白色的,请看 iPad :-))。

struct testBackground: View {
    @Environment(\.horizontalSizeClass) var horizontalSizeClass
    
    init() {
        if horizontalSizeClass == .compact {
            UITableView.appearance().backgroundColor = UIColor(Color.pink)
        }
        
// FOLLOWING WORKS:
//      if UIDevice.current.localizedModel == "iPhone"  {
//          UITableView.appearance().backgroundColor = UIColor(Color.pink)
//      }
    }
    
    var body: some View {
        List {
        }.overlay(Text("Hi, pink world!"))
    }
}

谢谢您的帮助!

标签: swiftswiftui

解决方案


在初始化之后注入环境,所以为了解决这个问题,我们需要List进入单独的视图并通过视图构造函数参数传递环境值(body它已经可用)

struct TestBackground: View {
    @Environment(\.horizontalSizeClass) var horizontalSizeClass
    
    var body: some View {
        ListContainerView(horizontalSizeClass: horizontalSizeClass)
    }
}

struct ListContainerView: View {
    
    init(horizontalSizeClass: UserInterfaceSizeClass?) {
        if horizontalSizeClass == .compact {
            UITableView.appearance().backgroundColor = UIColor(Color.pink)
        }
    }

    var body: some View {
        List {
        }.overlay(Text("Hi, pink world!"))
    }
}

推荐阅读