swift - 子视图在情节提要上的大小计算错误
问题描述
我有以下问题:
这只发生在某些屏幕尺寸上。此视图位于链接到此处列出的单独文件的 nib 中:
import Foundation
import UIKit
class FooterActionView : UIView {
@IBOutlet weak var actionButton: UIButton!
let nibName = "FooterActionView"
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit() {
guard let view = loadViewFromNib() else { return }
view.frame = self.bounds
self.addSubview(view)
}
func loadViewFromNib() -> UIView? {
let nib = UINib(nibName: nibName, bundle: nil)
return nib.instantiate(withOwner: self, options: nil).first as? UIView
}
}
我已经确认情节提要上的约束是完全正确的(并且不会导致视图宽度的这种错误计算)。这个视图是从另一个视图控制器子类化的,如下所示:
我在哪里可以查看导致这种情况的原因?(再次,我相当肯定这不是限制)。我试着用谷歌搜索,但找不到任何似乎可以解释它的东西。任何帮助是极大的赞赏。
解决方案
你是说
view.frame = self.bounds
在我们还不知道是什么self.bounds
的时候。然后约束开始起作用,self.bounds
变化的界限也随之而来。但框架view.frame
没有。
一个简单的解决方案是让您view
能够在更改时调整自身大小self.bounds
:
view.frame = self.bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
或者你可以等到layoutSubviews
设置view.frame
。
推荐阅读
- windows-store-apps - 修复了通过 Microsoft Store 安装 Windows 混合现实门户导致“出错”错误
- android - 为什么在运行时在 pubspec.yaml 中添加 firebase_admob: ^0.11.0+1 会产生错误(Flutter,Android)
- django - Django Rest Framework 如何过滤嵌套数据?
- java - Micronaut 需要异步编程吗?
- python - Python imshow 未显示更改
- apache-kafka - 在 docker 上为 kafka 暴露端口 8083 会出错
- maven - 有没有办法修复 Ambari Web 2.7.1.0.0 构建问题?
- php - Ajax表单提交我想通过id更改表单元素的值,以便脚本从php中的返回值进行下一次调用
- json - 如何从数组的响应中获取唯一数据并使用 React js 进行重定向?
- android - 如何使用 Reddit Android 应用程序中的展开/折叠动画在 BottomSheet 内创建轮播滑块