我正在尝试在SwiftUI中包括带有自定义字体的动态类型,并且当我尝试获取环境的sizeCategory
时,会不断调用此错误。
我尝试使用@Environment来获取sizeCategory
以外的对象,但是它总是抛出相同的错误。
我正在使用Xcode 11 beta 5上this StackOverflow帖子中的代码的修改版本。它似乎对那里的其他所有人都有效,所以我很困惑为什么它不适用我。
struct RawlineFont: ViewModifier {
var textStyle: Font.TextStyle
@Environment(\.sizeCategory) var sizeCategory : ContentSizeCategory
init(_ textStyle: Font.TextStyle = .body) {
self.textStyle = textStyle
}
func body(content: Content) -> some View {
content.font(getFont())
}
func getFont() -> Font {
switch(self.sizeCategory) {
case .extraSmall:
return Font.custom("Rawline", size: 16 * getStyleFactor())
case .small:
return Font.custom("Rawline", size: 21 * getStyleFactor())
case .medium:
return Font.custom("Rawline", size: 24 * getStyleFactor())
case .large:
return Font.custom("Rawline", size: 28 * getStyleFactor())
case .extraLarge:
return Font.custom("Rawline", size: 32 * getStyleFactor())
case .extraExtraLarge:
return Font.custom("Rawline", size: 36 * getStyleFactor())
case .extraExtraExtraLarge:
return Font.custom("Rawline", size: 40 * getStyleFactor())
case .accessibilityMedium:
return Font.custom("Rawline", size: 48 * getStyleFactor())
case .accessibilityLarge:
return Font.custom("Rawline", size: 52 * getStyleFactor())
case .accessibilityExtraLarge:
return Font.custom("Rawline", size: 60 * getStyleFactor())
case .accessibilityExtraExtraLarge:
return Font.custom("Rawline", size: 66 * getStyleFactor())
case .accessibilityExtraExtraExtraLarge:
return Font.custom("Rawline", size: 72 * getStyleFactor())
@unknown default:
return Font.custom("Rawline", size: 36 * getStyleFactor())
}
}
func getStyleFactor() -> CGFloat {
switch textStyle {
case .caption:
return 0.6
case .footnote:
return 0.7
case .subheadline:
return 0.8
case .callout:
return 0.9
case .body:
return 1.0
case .headline:
return 1.2
case .title:
return 1.5
case .largeTitle:
return 2.0
@unknown default:
return 1.0
}
}
}
完整的代码文件:
//
// Fonts.swift
// Team Study
//
// Created by Aditya Chugh on 2019-07-02.
// Copyright © 2019 Aditya Chugh. All rights reserved.
//
import SwiftUI
class Rawline {
static let extraLight = "RawlineExtraLight-Regular"
static let extraLightItalic = "RawlineExtraLight-Italic"
static let light = "RawlineLight-Regular"
static let lightItalic = "RawlineLight-Italic"
static let thin = "RawlineThin-Regular"
static let thinItalic = "Rawline-ThinItalic"
static let regular = "Rawline-Regular"
static let italic = "Rawline-Italic"
static let medium = "RawlineMedium-Regular"
static let mediumItalic = "RawlineMedium-Italic"
static let semiBold = "RawlineSemiBold-Regular"
static let semiBoldItalic = "RawlineSemiBold-Italic"
static let bold = "Rawline-Bold"
static let boldItalic = "Rawline-BoldItalic"
static let extraBold = "RawlineExtraBold-Regular"
static let extraBoldItalic = "RawlineExtraBold-Italic"
static let black = "RawlineBlack-Regular"
static let blackItalic = "RawlineBlack-Italic"
}
struct RawlineFont: ViewModifier {
var textStyle: Font.TextStyle
@Environment(\.sizeCategory) var sizeCategory : ContentSizeCategory
init(_ textStyle: Font.TextStyle = .body) {
self.textStyle = textStyle
}
func body(content: Content) -> some View {
content.font(getFont())
}
func getFont() -> Font {
switch(self.sizeCategory) {
case .extraSmall:
return Font.custom("Rawline", size: 16 * getStyleFactor())
case .small:
return Font.custom("Rawline", size: 21 * getStyleFactor())
case .medium:
return Font.custom("Rawline", size: 24 * getStyleFactor())
case .large:
return Font.custom("Rawline", size: 28 * getStyleFactor())
case .extraLarge:
return Font.custom("Rawline", size: 32 * getStyleFactor())
case .extraExtraLarge:
return Font.custom("Rawline", size: 36 * getStyleFactor())
case .extraExtraExtraLarge:
return Font.custom("Rawline", size: 40 * getStyleFactor())
case .accessibilityMedium:
return Font.custom("Rawline", size: 48 * getStyleFactor())
case .accessibilityLarge:
return Font.custom("Rawline", size: 52 * getStyleFactor())
case .accessibilityExtraLarge:
return Font.custom("Rawline", size: 60 * getStyleFactor())
case .accessibilityExtraExtraLarge:
return Font.custom("Rawline", size: 66 * getStyleFactor())
case .accessibilityExtraExtraExtraLarge:
return Font.custom("Rawline", size: 72 * getStyleFactor())
@unknown default:
return Font.custom("Rawline", size: 36 * getStyleFactor())
}
}
func getStyleFactor() -> CGFloat {
switch textStyle {
case .caption:
return 0.6
case .footnote:
return 0.7
case .subheadline:
return 0.8
case .callout:
return 0.9
case .body:
return 1.0
case .headline:
return 1.2
case .title:
return 1.5
case .largeTitle:
return 2.0
@unknown default:
return 1.0
}
}
}
答案 0 :(得分:3)
我有同样的错误信息。事实证明,我定义了另一个名为Environment的类型,编译器正在选择该类型。
这对我有用:@SwiftUI.Environment(\.colorScheme) var colorScheme : ColorScheme
希望这对您有帮助
答案 1 :(得分:0)
我是回答您提到的问题的人。我只是尝试使用Beta 5发布的代码,所以效果很好。但是,请注意,使用SwiftUI,当真正的错误在其他地方时,您可能会在某些地方出现错误。我敢打赌,您的代码其他部分可能会有不平衡的括号。否则可能完全是另一回事。再次检查,如果问题仍然存在,请发布完整代码。
答案 2 :(得分:0)
如果您的应用程序中有另一个名为npm start
的对象,则它将与Environment
的环境关键字冲突。更改自定义SwiftUI
对象的名称