iOS 13 SwiftUI中的UIToolbar?
我正在尝试将iOS 13 SwiftUI中的UIToolbar?,swift,swiftui,ios13,uitoolbar,uiviewrepresentable,Swift,Swiftui,Ios13,Uitoolbar,Uiviewrepresentable,我正在尝试将UIToolbar改编为UIViewRepresentable,以便在SwiftUI中使用它。我必须支持iOS 13,否则我将使用iOS 14中苹果的新工具栏 到目前为止,我有在屏幕上显示工具栏的代码,但是对于没有主页按钮的设备,它没有扩展到屏幕底部的安全区域 是否有人对SwiftUI中完整的UIToolbar实现有任何建议或参考 图片: 我的代码: // TestView.swift var body: some View { VStack { Toolbar(ite
UIToolbar
改编为UIViewRepresentable
,以便在SwiftUI中使用它。我必须支持iOS 13,否则我将使用iOS 14中苹果的新工具栏
到目前为止,我有在屏幕上显示工具栏的代码,但是对于没有主页按钮的设备,它没有扩展到屏幕底部的安全区域
是否有人对SwiftUI中完整的UIToolbar
实现有任何建议或参考
图片:
我的代码:
// TestView.swift
var body: some View {
VStack {
Toolbar(items: [
UIBarButtonItem(
title: "Done",
style: .plain,
target: nil,
action: nil
])
}
}
// Toolbar.swift
import SwiftUI
import UIKit
import Foundation
struct Toolbar: UIViewRepresentable {
typealias UIViewType = UIToolbar
var items: [UIBarButtonItem]
var toolbar: UIToolbar
init(items: [UIBarButtonItem]) {
self.toolbar = UIToolbar()
self.items = items
}
func makeUIView(context: UIViewRepresentableContext<Toolbar>) -> UIToolbar {
toolbar.setItems(self.items, animated: true)
toolbar.barStyle = UIBarStyle.default
toolbar.sizeToFit()
return toolbar
}
func updateUIView(_ uiView: UIToolbar, context: UIViewRepresentableContext<Toolbar>) {
}
func makeCoordinator() -> Toolbar.Coordinator {
Coordinator(self)
}
final class Coordinator: NSObject, UIToolbarDelegate, UIBarPositioning {
var toolbar: Toolbar
var barPosition: UIBarPosition
init(_ toolbar: Toolbar) {
self.toolbar = toolbar
self.barPosition = .bottom
}
private func position(for: UIToolbar) -> UIBarPosition {
return .bottom
}
}
}
//TestView.swift
var body:一些观点{
VStack{
工具栏(项目:[
伊巴布托教派(
标题:“完成”,
风格:,朴素,
目标:零,
行动:无
])
}
}
//斯威夫特
导入快捷键
导入UIKit
进口基金会
结构工具栏:UIViewRepresentable{
typealias UIViewType=UIToolbar
变量项:[uibarbuttonim]
变量工具栏:UIToolbar
初始化(项:[uibarbuttonite]){
self.toolbar=UIToolbar()
self.items=项目
}
func makeUIView(上下文:UIViewRepresentableContext)->UIToolbar{
toolbar.setItems(self.items,动画:true)
toolbar.barStyle=UIBarStyle.default
toolbar.sizeToFit()
返回工具栏
}
func updateUIView(uiView:UIToolbar,context:UIViewRepresentableContext){
}
func makeCoordinator()->Toolbar.Coordinator{
协调员(自我)
}
最终类协调器:NSObject、UIToolbarDelegate、UIBarPositioning{
变量工具栏:工具栏
变量barPosition:UIBarPosition
初始化(工具栏:工具栏){
self.toolbar=工具栏
self.barPosition=.bottom
}
专用函数位置(用于:UIToolbar)->UIBarPosition{
返回,底部
}
}
}
在SwiftUI视图层次结构的上下文中,任何UIViewRepresentable
都只是一个视图,因此它应该由SwiftUI instruments进行布局
这是固定部分(您的代表性文件中没有变更)
使用Xcode 11.4/iOS 13.4进行测试
这太棒了,谢谢!您对如何增加工具栏的高度以使其不太接近底部向上滑动指示器有何建议?我已经尝试在SwiftUI框架上指定最小高度,但似乎没有任何影响it@SwiftEnthusiast我认为最好的方法是删除
.edgesIgnoringSafeArea(.底部)
从上面开始。
struct DemoToolbarView: View {
var body: some View {
VStack {
Toolbar(items: [
UIBarButtonItem(
title: "Done",
style: .plain,
target: nil,
action: nil)
])
}.frame(maxHeight: .infinity, alignment: .bottom)
.edgesIgnoringSafeArea(.bottom)
}
}