我有我創建的自定義UIButton。在按鈕裏面,我有兩個標籤,一個在另一個之上。最重要的是標題,因此它有點大,而最下面的一個更小。 我的目標是讓兩個標籤完全覆蓋整個按鈕,如下所示: 頂部標籤將覆蓋按鈕的頂部2/3部分,底部將覆蓋按鈕的其餘1/3部分。 我的目標離我們不遠,但是我感到奇怪的行爲 - 標籤稍微偏離了按鈕,並且在某些情況下它們消失了(我可以點擊按鈕但看不到標籤)。 這是我的自定義的UIButton參考,我希望這個代碼將幫助人們無論到我的問題:以編程方式在UIButton中設置標籤的框架大小
class ButtonWithStats: UIButton {
var num: Int
var name: String
var nameLabel: UILabel?
var numLabel: UILabel?
required init?(coder aDecoder: NSCoder) {
// fatalError("init(coder:) has not been implemented")
self.num = 0
self.name = ""
self.numLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0)) //just to init the labels.
self.nameLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
self.numLabel?.textAlignment = .center
self.nameLabel?.textAlignment = .center
self.numLabel?.textColor = UIColor.purple
self.nameLabel?.textColor = UIColor.black
self.numLabel?.font = UIFont.init(name: "Helvetica", size: 11)
self.nameLabel?.font = UIFont.init(name: "Helvetica", size: 13)
super.init(coder: aDecoder)
}
func setButton(numInput: Int, nameInput: String){
self.num = numInput
self.name = nameInput
self.setLabels()
}
private func setLabels(){
numLabel?.text = String(self.num)
nameLabel?.text = self.name
let widthForName = self.frame.width
let heightForName = self.frame.height * 2/3
nameLabel?.center = self.center
nameLabel?.frame = CGRect(origin: self.frame.origin, size: CGSize(width: widthForName, height: heightForName))
let widthForNum = self.frame.width
let heightForNum = self.frame.height * 1/3
let yForNum = (self.frame.height * 2/3) //+ self.frame.origin.y
numLabel?.frame = CGRect(x: self.frame.origin.x, y: yForNum, width: widthForNum, height: heightForNum)
self.addSubview(nameLabel!)
self.addSubview(numLabel!)
print("@@@@@@@@@@@@@@@@@@@@@@@@@")
print("Button \(self.nameLabel?.text) frame is: \(self.frame)")
print("Label frame is: \(self.nameLabel?.frame)")
print("Num frame is: \(self.numLabel?.frame)")
print("@@@@@@@@@@@@@@@@@@@@@@@@@")
}
}
我的控制檯打印這樣的數據:
@@@@@@@@@@@@@@@@@@@@@@@@@
Button Optional("button one") frame is: (257.5, 0.0, 64.5, 33.0)
Label frame is: Optional((257.5, 0.0, 64.5, 22.0))
Num frame is: Optional((257.5, 22.0, 64.5, 11.0))
@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@
Button Optional("Button two") frame is: (129.0, 0.0, 64.0, 33.0)
Label frame is: Optional((129.0, 0.0, 64.0, 22.0))
Num frame is: Optional((129.0, 22.0, 64.0, 11.0))
@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@
Button Optional("Button three") frame is: (0.0, 0.0, 64.5, 33.0)
Label frame is: Optional((0.0, 0.0, 64.5, 22.0))
Num frame is: Optional((0.0, 22.0, 64.5, 11.0))
@@@@@@@@@@@@@@@@@@@@@@@@@
我喜歡堆棧的想法,會更新! – Sharonica
如何使用堆棧視圖將大小設置爲2/3和1/3? – Sharonica
非常感謝! @Ashley Mills – Sharonica