UIButton ที่มีความสูงเพิ่มขึ้นหากความกว้างไม่เพียงพอ

ฉันต้องการปุ่มเพื่อตั้งค่าผ่าน autolayout ซึ่ง ความสูงจะเพิ่มขึ้น หากพื้นที่แนวนอนไม่เพียงพอ เช่น หลังการหมุน ฉันมีข้อจำกัดนำหน้าและต่อท้ายในมุมมองพาเรนต์ และในโหมดแนวตั้งมีพื้นที่ไม่เพียงพอ ดังนั้นฉันจึงคิดว่าจะไม่ลดขนาดตัวอักษร แต่เพิ่มความสูงและตั้งค่า Word Wrap สำหรับ Line Break ฉันกำลังทดลอง size classes แต่บางครั้ง wCompact hAny ก็ถูกใช้อยู่เสมอ เพราะฉันกำลังทดสอบใน iPhone ดังนั้นการตั้งค่าความสูงที่แตกต่างกันสำหรับปุ่มสำหรับคลาสขนาดต่างๆ จึงไม่มีผลใดๆ

ใครมีความคิดวิธีการตั้งค่าความสูงของปุ่มขึ้นอยู่กับความกว้างของปุ่มที่มีอยู่และเนื้อหาผ่านข้อ จำกัด ของเลย์เอาต์อัตโนมัติ

ปุ่มบน iPhone ด้านล่างต้องมีสองบรรทัด ไม่ใช่ 30px แต่มีขนาดประมาณ 60px.

ป้อนคำอธิบายรูปภาพที่นี่


person János    schedule 16.09.2014    source แหล่งที่มา
comment
@janos- ความกว้างสูงสุดของปุ่มจะเป็นเท่าใด ... ?   -  person Vivek Sehrawat    schedule 16.09.2014
comment
ไม่มีความกว้างสูงสุด ขึ้นอยู่กับว่าแอปของอุปกรณ์ใดทำงานอยู่   -  person János    schedule 16.09.2014
comment
@janos- คุณต้องตัดสินใจว่าความกว้างสูงสุดของปุ่มจะเป็นเท่าใด   -  person Vivek Sehrawat    schedule 16.09.2014
comment
ฉันจะไม่ทำมันโดยทางโปรแกรมด้วยวิธี sizeWithAttributes   -  person János    schedule 16.09.2014


คำตอบ (3)


ทำไมคุณถึงใช้ปุ่ม? นี่ไม่ใช่สิ่งที่ปุ่มมีไว้เพื่อ หากคุณมีข้อความที่จะแสดงขนาดนั้น ให้ใช้ UILabel หรือ UITextView จากนั้นคุณสามารถเพิ่มตัวจดจำท่าทางลงไปเพื่อจับการแตะ

person Fogmeister    schedule 16.09.2014

คุณสามารถใช้ UILabel และสามารถใช้ UITapGestureRecognizer กับมันได้ และตั้งค่าจำนวนบรรทัด = 0 ในไฟล์ปลายปากกาและมีท่าทางแตะหนึ่งครั้ง มันจะทำงานเหมือนปุ่มที่แทบไม่มีโค้ดตามที่คุณต้องการ

person Vivek Sehrawat    schedule 16.09.2014

เนื่องจากฉันสงสัยว่ามันเป็นไปไม่ได้ด้วย Interface Builder ฉันจึงสร้างมันขึ้นมาด้วยคลาสย่อย UIButton:

class DynamicHeightButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

        let size = (self.titleForState(UIControlState.Normal)! as NSString).boundingRectWithSize(CGSizeMake(self.bounds.size.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17)], context: nil)
        self.bounds.size.height = size.height + 8
    }
}
person János    schedule 16.09.2014