मैं सोच रहा हूं कि जब numberOfLines को 1 पर सेट किया गया है, तो मेरा UILabel सही ढंग से फ़ॉन्ट का आकार क्यों नहीं बदल रहा है। मेरे पास नीचे दिए गए कोड के साथ एक खेल का मैदान है:

import UIKit
import PlaygroundSupport

let labelFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
let label = UILabel(frame: labelFrame)
label.backgroundColor = .lightGray
label.text = "Something that's pretty long"

label.baselineAdjustment = .alignCenters
label.adjustsFontSizeToFitWidth = true

label.numberOfLines = 1
label.minimumScaleFactor = 0.1

let frame = CGRect(x: 0, y: 0, width: 300, height: 300)
let view = UIView(frame: frame)
view.backgroundColor = .white

view.addSubview(label)

PlaygroundPage.current.liveView = view

और यह परिणाम है कोई फ़ॉन्ट सिकुड़ना नहीं

हालांकि, जब मैं numberOfLines को 2 में बदलता हूं तो फ़ॉन्ट वैसे ही सिकुड़ जाता है जैसे मैं उम्मीद करता हूं:

import UIKit
import PlaygroundSupport

let labelFrame = CGRect(x: 0, y: 0, width: 100, height: 100)
let label = UILabel(frame: labelFrame)
label.backgroundColor = .lightGray
label.text = "Something that's pretty long"

label.baselineAdjustment = .alignCenters
label.adjustsFontSizeToFitWidth = true

label.numberOfLines = 2   // <<<<<< this is the only change
label.minimumScaleFactor = 0.1

let frame = CGRect(x: 0, y: 0, width: 300, height: 300)
let view = UIView(frame: frame)
view.backgroundColor = .white

view.addSubview(label)

PlaygroundPage.current.liveView = view

और यहाँ परिणाम है: यहां छवि विवरण दर्ज करें

यहाँ क्या चल रहा है? क्या यह एक बग है या मैं कुछ गलत कर रहा हूँ?

1
Trev14 3 नवम्बर 2018, 00:49

1 उत्तर

सबसे बढ़िया उत्तर

हम्म्म्म ऐसा लगता है कि यह खेल के मैदानों में सिर्फ एक बग है। अगर मैं इस लाइन को जोड़ूं

label.lineBreakMode = .byTruncatingMiddle

सब कुछ उम्मीद के मुताबिक काम करता है। दरअसल, इनमें से कोई भी काम:

label.lineBreakMode = .byCharWrapping
label.lineBreakMode = .byClipping
label.lineBreakMode = .byTruncatingHead
label.lineBreakMode = .byTruncatingMiddle
label.lineBreakMode = .byWordWrapping

वह जो काम नहीं करता (और डिफ़ॉल्ट भी है) है

label.lineBreakMode = .byTruncatingTail

जब मैंने एक वास्तविक सिम्युलेटर में यह कोशिश की तो सब कुछ अच्छा लग रहा था, इसलिए मुझे लगता है कि मैं बस एक खेल के मैदान में भाग गया।

0
Trev14 2 नवम्बर 2018, 22:25