自定义UIView调用后无法显示,请求排查问题原因
排查自定义弹窗无显示的常见问题
嘿,这种情况我碰过好几次,大概率是这几个常见问题之一,咱们一个个排查:
弹窗没被加入到视图层级里
很多时候你创建了弹窗实例,但忘了把它添加到当前视图控制器的视图中。比如在UIKit里,你得手动把弹窗的view加到父视图:let popUp = CustomPopUp() // 先设置好frame或者用AutoLayout popUp.frame = view.bounds view.addSubview(popUp)如果是SwiftUI的话,可能是没通过
sheet、fullScreenCover或者把弹窗放在ZStack的顶层。布局约束没设置对,弹窗“藏”起来了
就算加了视图,约束出错的话,弹窗可能尺寸为0或者被挤到屏幕外。用AutoLayout的话,一定要给弹窗明确的位置和大小约束:popUp.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ popUp.centerXAnchor.constraint(equalTo: view.centerXAnchor), popUp.centerYAnchor.constraint(equalTo: view.centerYAnchor), popUp.widthAnchor.constraint(equalToConstant: 300), popUp.heightAnchor.constraint(equalToConstant: 200) ])弹窗背景/内容太“透明”,看不见
要是弹窗背景色设成了clear,或者内部没加任何控件,就算显示了也瞅不见。先给弹窗整个显眼的背景色测试下:popUp.backgroundColor = .systemRed要是能看到红色块,就说明是内部内容的布局问题,再去调整控件的约束和显示。
弹窗实例被提前释放了
如果你在函数里把弹窗声明成局部变量,函数执行完它就被销毁了,自然看不到。得把弹窗设成视图控制器的属性:class YourViewController: UIViewController { var customPopUp: CustomPopUp? func showCustomPopUp() { customPopUp = CustomPopUp() // 这里添加到视图、设置约束... } }CustomPopUp类的初始化逻辑有问题
检查下customPopUp.swift里的初始化方法,是不是没正确创建内部视图。比如自定义UIView子类,要在init(frame:)和init?(coder:)里调用setup方法:class CustomPopUp: UIView { override init(frame: CGRect) { super.init(frame: frame) setupUI() } required init?(coder: NSCoder) { super.init(coder: coder) setupUI() } private func setupUI() { // 这里添加弹窗的内容,比如标签、按钮 let titleLabel = UILabel() titleLabel.text = "我的自定义弹窗" titleLabel.textAlignment = .center addSubview(titleLabel) // 给titleLabel设置约束... } }
内容的提问来源于stack exchange,提问作者D. Finna
相关产品推荐
相关产品推荐

