Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 13 SwiftUI中的UIToolbar?_Swift_Swiftui_Ios13_Uitoolbar_Uiviewrepresentable - Fatal编程技术网

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)
    }
}