[英]Making custom UILabel using swift in iOS having frame issues
我想使用swift創建自己的自定義UILabel,並且在使用init超級類時遇到框架問題。
這是我以前的經歷:
let label = UILabel()
我以前基本上使用普通的UILabel。 首先,我的問題是,如何為此設定框架? 因為當我進入UILabel類時,它繼承自UIView,而UIView中的init方法采用一個框架。 那么如何創建此框架?
然后,這將我帶到我自己的自定義UILabel,我將其稱為TimeLabel。 這是它的實現:
class TimeLabel: UILabel {
var clientName: String?
var time: Time?
init(name:String, time:Time) {
self.clientName = name
self.time = time
super.init(frame: ??)
}
required init?(coder aDecoder: NSCoder) {
super.init(frame:??)
}
}
現在,這鏈接到第一個問題,我應該從哪里得到這個框架? 打電話給UILabel之前我沒有提供框架嗎? 我該如何處理?
這是您設置課程的方式:
記住要使用“便利”關鍵字。 通過使用便捷關鍵字,您無需添加UIVIew繼承的NSCoding協議。
class TimeLabel: UILabel {
var clientName: String?
var time: Time?
// Use convenience keyword
convenience init(name: String?, time: Time?) {
self.init(frame: CGRect.zero)
self.clientName = name
self.time = time
}
}
這是您根據內容獲取寬度和高度的方式
let timeLabel = TimeLabel(name: "John", time: sometime)
let size = timeLabel.sizeThatFits(CGSize.zero)
// This is the label calculated width and height
let width = size.width
let height = size.height
let timeLabel = TimeLabel(name: "John", time: sometime)
// To active multiline features, set numberOfLines to 0
timeLabel.numberOfLines = 0
let size = timeLabel.sizeThatFits(CGSize(width: putYourWidthHere, height: 0))
// This is the label calculated width and height
let width = size.width
let height = size.height
1)這就是我如何用框架初始化標簽
UILabel(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 100.0 , height: 60.0)))
2)在自定義類中,盡管您可以執行此操作...
override init(frame: CGRect) {
super.init(frame: frame)
}
兩者都是分開的事情..我說對了嗎? 如有疑問請提問
一個參考
如果您不想在初始化時提供框架,請使用CGRect.zero
:
class TimeLabel: UILabel {
var clientName: String?
var time: Time?
init(name:String, time:Time) {
self.clientName = name
self.time = time
super.init(frame: CGRect.zero)
}
}
您隨時可以在以后更改框架,或使用自動布局,然后將為您設置框架。
您的init(coder:)
方法應僅解碼子類的屬性(如果需要),並將所有其他內容留給超類:
required init?(coder aDecoder: NSCoder) {
// decode clientName and time if you want
super.init(coder: aDecoder)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.