【发布时间】:2018-08-06 04:32:32
【问题描述】:
我想知道用特定框架初始化自定义 UIView 的最简洁方法是什么。
UIView 是根据 XIB 文件设计的。
这是我的实现:
class CustomView : UIView {
@IBOutlet var outletLabel: UILabel!
public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
public override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
private func setupView() {
// Set text for labels
}
}
这是我想在我的 ViewController 中初始化它的方式:
let screenSize: CGRect = UIScreen.main.bounds
let screenWidth = screenSize.width
let frame = CGRect(x: 0, y: 0, width: screenWidth - 50, height: 70)
let customView = CustomView.init(frame: frame)
但它不起作用,我有一个没有任何插座的白色 UIView。
如果我这样做:
// Extension to UIView to load Nib
let customView : CustomView = UIView.fromNib()
我可以从XIB 文件中看到我的view,它的宽度/高度在Interface Builder 中使用。
我想从XIB 文件中加载view 的具体框架是什么?
我是否遗漏了一些关于初始化的内容?
【问题讨论】:
-
你需要展示你是如何从 XIB 获得你的视图的。
-
你不能同时用frame和xib“初始化”,但是你可以从xib加载视图然后改变它的frame。尽管我建议您尽可能保持自动布局并避免显式更改框架。
-
PS:为什么不用 ViewController 初始化视图?
-
@MichaelVorontsov 这个自定义 UIView 是为了当用户在 App 中按下一个按钮时,它会显示一个 Tooltip。我需要根据屏幕大小设置视图宽度。
-
如果您使用故事板并且工具提示位置已修复,我会建议您创建容器视图控制器,根据需要设置约束并将其隐藏。然后,您可以在需要时显示它。如果您也想在代码中添加所有内容 - 我再次建议您实例化视图,然后设置它的约束。最新的 SDK 使它很容易做到,但您可以使用 SnapKit 使其更加明显,例如 cocoapods.org/pods/SnapKit 我强烈建议使用自动布局,因为 Apple 不赞成使用过去 4 或 5 年的框架。