UIView无法显示求助:使用SnapKit布局的ViewController代码问题
嗨,我来帮你捋捋为啥用SnapKit布局的视图没显示出来!结合你贴的代码片段,大概率是下面这些常见问题导致的:
SnapKit布局代码不完整
你代码里的scrollView.anchor(t...)明显没写完啊!SnapKit的正确约束写法应该是用snp.makeConstraints(或者旧版本的完整链式anchor调用)。比如scrollView要铺满父视图的话,得这么写:scrollView.snp.makeConstraints { make in make.edges.equalTo(view) }要是没给scrollView设置完整的约束,它的frame会是
CGRect.zero,自然就看不到了。子视图缺少约束
你把imageContainer、eventInfoView加到scrollView里了,但没给它们加约束啊!UIScrollView的contentSize是靠子视图的约束来确定的,子视图没有约束的话,不仅自身会因为没有布局规则而显示不出来,scrollView也不知道内容区域多大。举个例子,给子视图加约束的写法:imageContainer.snp.makeConstraints { make in make.top.left.right.equalTo(scrollView) make.height.equalTo(300) // 给个固定高度或者和其他视图关联 } eventInfoView.snp.makeConstraints { make in make.top.equalTo(imageContainer.snp.bottom) make.left.right.bottom.equalTo(scrollView) make.height.greaterThanOrEqualTo(view.snp.height) // 保证内容足够滚动 }视图未正确初始化
你有没有给scrollView、imageContainer这些视图做初始化?比如是不是只声明了变量但没创建实例?比如:// 正确的初始化方式 let scrollView = UIScrollView() let imageContainer = UIView() let eventInfoView = UIView()要是用了可选类型还没初始化,那添加到父视图的就是nil,肯定看不到。
setupView的调用时机不对
你的setupView()是@objc方法,有没有在正确的时机调用它?一般应该在viewDidLoad()里调用:override func viewDidLoad() { super.viewDidLoad() setupView() }要是在视图还没初始化好的时候调用,约束也不会生效。
contentInsetAdjustmentBehavior的影响(可能性较低)
你设置了scrollView.contentInsetAdjustmentBehavior = .never,如果你的页面有导航栏或者TabBar,这个设置可能导致内容被遮挡,但不会完全不显示。可以先注释掉这行代码看看有没有变化。
内容的提问来源于stack exchange,提问作者SJackson5

