什么情况下SwiftUI Slider的标签可见?
Sliderinits 可以接受标签参数,但我不明白这个标签的用途是什么?
struct ContentView: View {
@State private var slVal: CGFloat = -20
var body: some View {
Slider(value: $slVal, in: -40...40, minimumValueLabel: Text("-40"), maximumValueLabel: Text("40")) {
Text("Invisible text") // This view is not visible
}
.padding()
}
}
Run Code Online (Sandbox Code Playgroud)
放入Slider内部Form不会出现标签。我知道DatePicker的标签是否显示取决于.labelsHidden()修饰符以及修饰符DatePickerStyle的应用.datePickerStyle()。有类似的东西Slider吗?
以下 Swift 代码编译:
enum GraphDataSource {
case array(data: [Double], start: Double?, step: Double?)
case pairs(XYValues: [Double: Double])
case pairs(dateValues: [Date: Double])
case function((Double) -> Double?)
func localizedName() -> String {
// TODO: Create localizable strings
return NSLocalizedString(Mirror(reflecting: self).children.first?.label ?? "", comment: "")
}
}
Run Code Online (Sandbox Code Playgroud)
它有两个名为pairs. 但是当我尝试提取关联值时,结果是我无法选择我想要的值。
var graphData = GraphDataSource.function(sin)
switch graphData {
case .pairs(dateValues: let vals):
vals.keys.forEach({print($0)})
case .pairs(XYValues: let xy): // without this case everyting compiles OK
xy.keys.forEach({print($0)})
default:
break
}
Run Code Online (Sandbox Code Playgroud)
错误是:“元组模式元素标签‘XYValues’必须是‘dateValues’”。这是正常的吗?感觉编译器应该禁止同名的情况或允许同时打开两者。
我试图使具有关联值的枚举符合CaseIterable,RawRepresentable。当用rawValue初始化时,我对关联值的一些默认值很好。
enum GenresAssociated: CaseIterable, RawRepresentable, Equatable {
case unknown(String)
case blues(String)
case classical(String)
// Implementing CaseIterable
typealias AllCases = [GenresAssociated]
// Enums can have no storage, but the class they are in CAN. Note 'static' in declaration
static var allCases: [GenresAssociated] = [.unknown(""), .blues(""), .classical("")]
typealias RawValue = Int
var rawValue: Int {
// MARK: This causes a crash for unknown reason
return GenresAssociated.allCases.firstIndex(where: { if case self = $0 { return true } else { return false } } …Run Code Online (Sandbox Code Playgroud) 有人可以解释一下原因吗:
GeometryReader将其内容放置在左上角,而不是中心。
GeometryReader占用所有可用空间。
struct ContentView: View {
var body: some View {
VStack(alignment: .center) {
GeometryReader { geo in
Text("Hello, World!")
.frame(width: geo.size.width * 0.7, height: 40)
.background(Color.red)
}
.background(Color.yellow)
Text("More text")
.background(Color.blue)
}
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来是这样的:
我希望它将Text“Hello, World”视图放置在中心。
连同预定义的动画曲线,这些是使用timingcurve( : : : :duration:)设置时序曲线的选项。它的参数 ( c0x, c0y, c1x, c1y)的含义是什么?曲线是如何建立的?缺乏文档。
这应该很简单,但我不知道如何在 NavigationStack 后面放置背景。对于 NavigationView,只需嵌入 ZStack 中,并在 NavigationView 之前调用背景视图即可(如旧文章中所述:如果在 SwiftUI 中使用 NavigationView,如何更改背景颜色?)相同的技术对我来说不适用于 NavigationStack 。这是我所拥有的:
struct MyAngularGradient: View {
var body: some View {
ZStack {
AngularGradient(gradient: Gradient(colors: [.red, .orange , .yellow, .green, .cyan, .blue, .indigo, .purple, .red]), center: .leading)
AngularGradient(gradient: Gradient(colors: [.red, .orange , .yellow, .green, .cyan, .blue, .indigo, .purple, .red]), center: .leading)
.offset(x: -8)
}
.ignoresSafeArea()
}
}
var body: some View {
ZStack{
MyAngularGradient()
NavigationStack {
...
}
.navigationViewStyle(.stack)
} // end ZStack
Run Code Online (Sandbox Code Playgroud)
仅供参考,我在其他应用程序(带有 NavigationView)中使用了相同的 MyAngularGradient() 有什么想法吗?谢谢。