问题描述
我的视图正在偏移或放大,我似乎无法弄清楚。
这是我得到的:
这是我想要的:
我试图追踪错误位置,我认为这可能是我的框架搞砸的地方。
let frame = reader.frame(in: .global)
struct MainView: View {
@State var offset: CGFloat = 0
var body: some View {
GeometryReader{reader in
let frame = reader.frame(in: .global)
ScrollableTabBar(tabs: ["",""],rect: frame,offset: $offset){
Home(offset: $offset)
SettingsView()
}
.ignoresSafeArea()
}
.ignoresSafeArea()
}
}
import SwiftUI
struct ScrollableTabBar<Content: View>: UIViewRepresentable{
var content: Content
var rect: CGRect
@Binding var offset: CGFloat
var tabs: [Any]
let scrollView = UIScrollView()
init(tabs: [Any],rect: CGRect,offset: Binding<CGFloat>,@viewbuilder content: ()-> Content) {
self.content = content()
self._offset = offset
self.rect = rect
self.tabs = tabs
}
func makeCoordinator() -> Coordinator {
return ScrollableTabBar.Coordinator(parent: self)
}
func makeUIView(context: Context) -> UIScrollView {
setUpScrollView()
scrollView.contentSize = CGSize(width: rect.width * CGFloat(tabs.count),height: rect.height)
scrollView.contentOffset.x = offset
scrollView.addSubview(extractView())
scrollView.delegate = context.coordinator
return scrollView
}
func updateUIView(_ uiView: UIScrollView,context: Context) {
if uiView.contentOffset.x != offset{
uiView.delegate = nil
UIView.animate(withDuration: 0.4){
uiView.contentOffset.x = offset
} completion: { (status) in
if status{uiView.delegate = context.coordinator}
}
}
}
func setUpScrollView(){
scrollView.isPagingEnabled = true
scrollView.bounces = false
scrollView.showsverticalScrollIndicator = false
scrollView.showsHorizontalScrollIndicator = false
}
func extractView() -> UIView{
let controller = UIHostingController(rootView: HStack(spacing: 0){content}.ignoresSafeArea())
controller.view.frame = CGRect(x: 0,y: 0,width: rect.width * CGFloat(tabs.count),height: rect.height)
return controller.view!
}
class Coordinator: NSObject,uiscrollviewdelegate{
var parent: ScrollableTabBar
init(parent: ScrollableTabBar){
self.parent = parent
}
func scrollViewDidScroll(_ scrollView: UIScrollView) {
parent.offset = scrollView.contentOffset.x
}
}
struct ScrollableTabBar_Previews: PreviewProvider {
static var previews: some View{
ContentView()
}
}
}
如果有人知道我需要改变什么,请告诉我。谢谢!
编辑:添加了 ScrollableTabBar
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)