onevcat / swift-ui-book-issue

76 stars 0 forks source link

在 List 中使用 UIKit,滑动后 UIKit 相关组件尺寸为 0 #33

Open Larrycal opened 4 years ago

Larrycal commented 4 years ago

声明了一个基于 UIKit 的 VisualEffectView

VisualEffectView.swift

import SwiftUI
import UIKit

struct VisualEffectView: UIViewRepresentable {
    typealias UIViewType = UIView
    var effect:UIVisualEffect

    func makeUIView(context: UIViewRepresentableContext<VisualEffectView>) -> UIViewType {
        let view = UIView(frame: .zero)
        view.backgroundColor = .clear
        let effectView = UIVisualEffectView(effect: effect)
        effectView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(effectView)
        NSLayoutConstraint.activate([
            effectView.heightAnchor.constraint(equalTo: view.heightAnchor),
            effectView.widthAnchor.constraint(equalTo: view.widthAnchor)
        ])
        return view
    }

    func updateUIView(_ uiView: UIViewType, context: UIViewRepresentableContext<VisualEffectView>) {
    }
}

同时声明了一个名叫MainTableViewCell的 cell

MainTableViewCell.swift

import SwiftUI

struct MainTableViewCell: View {
    var body: some View {
            HStack(alignment: .center) {
                Text("Test")
                    .font(Font.system(size: 20.0,weight: .bold))
                    .lineLimit(Int.max)
                    .foregroundColor(.black)
                    .multilineTextAlignment(.leading)
                    .padding([.horizontal],0)
                VisualEffectView(effect: UIBlurEffect(style: .regular)).frame(width: 100, height: 40).layoutPriority(1)
            }
            .padding(0)
            .background(Color.purple)
    }
}

组合 list ,并显示

MainTableView.swift

struct MainTableView: View {
    var body: some View {
        List {
            ForEach(Range(uncheckedBounds: (lower: 0, upper: 60))) { (i) in
                MainTableViewCell().listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
            }
        }.edgesIgnoringSafeArea([.top,.bottom])
    }
}

如图,红框部分为基于 UIVisualEffectView实现的 SwiftUI 类 image 当滑动后,此 view 消失,通过打印,frame为{0 0, 0 0} finally 请问下是什么原因造成的?

SilkSong commented 4 years ago

我按照你的代码试了一下,并没有出现上述问题,你把软件更新到最新版看看~

Larrycal commented 4 years ago

我按照你的代码试了一下,并没有出现上述问题,你把软件更新到最新版看看~

@SilkSong 感谢。我再试试。