有一个视图,我正在应用一个键盘定位的工具栏。如果我单独显示视图,工具栏会出现。如果视图在工作表中(通过.sheet修饰符),工具栏不会出现。
我想让工具栏出现在键盘和底部工作表之间。
我试过改变.toolbar修饰符应用到的视图。我在TextField上有它,但是即使应用到包含其他视图的VStack也没有什么作用。
下面是一些代码(简化):
struct CharInputModifier: ViewModifier {
@Binding var char : String
var textLimt = 1
func limitText(_ upper : Int) {
if char.count > upper {
self.char = String(char.prefix(upper))
}
}
func body(content: Content) -> some View {
content
.multilineTextAlignment(.center)
.keyboardType(.numberPad)
.onReceive(Just(char)) {_ in limitText(textLimt)}
.font(.largeTitle)
.frame(height: 100)
.background(Color(.graySecondary).opacity(0.6))
.cornerRadius(20)
.overlay(
RoundedRectangle(cornerRadius: 20)
.stroke(.gray, lineWidth: 1)
.opacity(0.5)
)
}
}
个字符
如果我只是将ManualDeviceCodeInput显示为一个独立的视图,它工作得很好。在工作表中,什么都不显示。
这里的想法是,设备是以字符(N/O)为前缀的,我试图在工具栏上显示带有两个字符选项的数字键盘。
1条答案
按热度按时间lh80um4z1#
在我运行iOS 17.2的模拟器上,当表单视图是主视图或工作表时,该工具栏会显示。这可能是早期版本中存在的问题。
为了获得最佳的工作机会,我建议稍微调整一下工具栏代码。不要将条件放在
ToolbarItem
周围,而是将条件移动到ToolbarItem
内部。例如:字符串
根据我的经验,用
.toolbar { ... }
定义的@ToolbarContentBuilder
块并不总是像它的ToolbarItem
子组中的视图那样对状态更改做出响应,因此这是一种提高fieldFocusState
中的更改触发重画的机会的方法。(例如,当if
语句为false并且没有else
替换时),项目不会占用任何空间-因此整体视觉效果应该相同。