我在SwiftUI中有一个TextField,我希望始终显示“%”后缀。用户不应该能够删除它,它应该始终保持在右侧,即使在添加文本时。我该怎么做?
wmtdaxz31#
**%**可以是一个单独的视图,始终显示在正确的位置。
将UIKit控件 Package 在UIViewRepresentable中。这将给予您能够访问更多的定位信息。如果你 Package 一个UITextInput,那么你可以用firstRect(for:)得到文本最后一个字符的CGRect。然后,您可以通过以下方式显示**%**:
UIViewRepresentable
UITextInput
firstRect(for:)
CGRect
如果你想用SwiftUI显示**%**,可以用ZStack实现:
ZStack(alignment: .topLeading) { Text("%").offset(x: lastCharacterPosition.maxX, y: lastCharacterPosition.minY) CustomTextInput( text: $text, onLastCharacterPositionChange: { rect in self.lastCharacterPosition = rect } ) }
请注意,在此场景中,CustomTextInput必须配置为透明。此外,偏移量可能需要一些调整,我没有尝试。
CustomTextInput
beq87vna2#
仅SwiftUI:您可以使用相同的文本在文本字段下创建不可见文本,然后添加任何您想要的后缀。
下面的灰色输入标签有一个不可见的hidden()文本作为背景,它总是将Text("]")文本推到正确的位置。
hidden()
Text("]")
HStack(spacing: 1) { Text("[") .font(.sourceSans(size: 24, weight: .regular)) .foregroundColor(UI.Color.foreground.secondary) TextField( mode.name, text: $word.phonemes.updating($lastUpdated) ) .disableAutocorrection(true) .font(.sourceSans(size: 24, weight: .regular)) .foregroundColor(UI.Color.foreground.secondary) .background( HStack(spacing: 1) { Text(word.phonemes) .font(.sourceSans(size: 24, weight: .regular)) .hidden() Text("]") .font(.sourceSans(size: 24, weight: .regular)) .foregroundColor(UI.Color.foreground.secondary) Spacer() } ) Spacer() } .frame(height: 24)
2条答案
按热度按时间wmtdaxz31#
**%**可以是一个单独的视图,始终显示在正确的位置。
将UIKit控件 Package 在
UIViewRepresentable
中。这将给予您能够访问更多的定位信息。如果你 Package 一个UITextInput
,那么你可以用firstRect(for:)
得到文本最后一个字符的CGRect
。然后,您可以通过以下方式显示**%**:
CGRect
,用SwiftUI显示**%**。如果你想用SwiftUI显示**%**,可以用ZStack实现:
请注意,在此场景中,
CustomTextInput
必须配置为透明。此外,偏移量可能需要一些调整,我没有尝试。beq87vna2#
仅SwiftUI:您可以使用相同的文本在文本字段下创建不可见文本,然后添加任何您想要的后缀。
下面的灰色输入标签有一个不可见的
hidden()
文本作为背景,它总是将Text("]")
文本推到正确的位置。