2012-04-17 14 views
5

मैं UIButton के शीर्षक के लिए एक कस्टम फ़ॉन्ट का उपयोग कर रहा हूं। यह काम करता है, इस विशेष फ़ॉन्ट को छोड़कर पहले चरित्र का एक हिस्सा फिसल जाता है। उदाहरण के लिए:फसल यूआई बटन बटन

enter image description here

मैं contentEdgeInsets और titleEdgeInsets स्थापित करने की कोशिश की और यह काटा नहीं मिल नहीं कर पा रहे। मैंने बटन.titleLabel.clipsToBounds प्रॉपर्टी को NO पर सेट करने का भी प्रयास किया;

किसी भी सुझाव की सराहना की जाएगी।

उत्तर

8

तो मैंने अभी यूआईबटन शीर्षक को शून्य पर सेट अप किया और यूआईबटन के लिए एक सबव्यूव के रूप में अपना खुद का यूलाबेल जोड़ा। मैंने UILabel फ्रेम को बटन के समान आकार में सेट किया है और इसे केंद्रित करने के लिए सेट किया है।

मुझे यकीन है कि सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन यह काम पूरा हो जाता है।

+2

यह वास्तव में बेकार है कि यह एकमात्र समाधान है। ऐसा होने का कारण यह है कि फ़ॉन्ट डिज़ाइनर जानबूझकर अपने अक्षरों की सीमाओं को वास्तव में कम से कम एन्कोड करते हैं ताकि वे घोंसला कर सकें। यह इटालिक और कर्सर फोंट के लिए विशेष रूप से महत्वपूर्ण है। काश है कि ऐप्पल UIButton लेबल की चौड़ाई की गणना के साथ इतना "सटीक" नहीं होता, या कम से कम हमें इसे स्वयं बदलने की अनुमति देता है। मैं एक बग रिपोर्ट दर्ज कर रहा हूं, आपको भी चाहिए। – Bek

1

ऐसा लगता है कि आपकी सामग्री को अजीब तरीके से गठबंधन किया गया है। यदि लेबल का फ्रेम सीधे पहुंच योग्य नहीं है, तो क्षैतिज संरेखण समस्या को ठीक करने का प्रयास करने के लिए [button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; का उपयोग करें।

+0

वास्तव में यह केंद्र के लिए सेट किया गया है के रूप में किया जाता है। अगर मैं इसे सही औचित्य में स्थापित करता हूं तो यह फसल बनी हुई है। –

9

हालांकि Jeshua का समाधान ठीक काम करता है, यह मेरी आंखों में इष्टतम नहीं है। मैं यूआईबटन को उपclass करने की सिफारिश करता हूं और इसे layoutSubviews विधि को ओवरराइट करता हूं। ऊपर उत्तर के लिए

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

यह करना वास्तव में आसान है, बस एक वर्ग (सबक्लासिंग UIButton) बनाएं, कॉपी पेस्ट करें, बटन की कस्टम क्लास को असाइन करें। धन्यवाद! –

+0

यह स्वीकार्य उत्तर होना चाहिए। सरल और सुरुचिपूर्ण। –

+0

सही धन्यवाद –

0

Swift कोड:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
}