2011-02-10 11 views
14

मेरे पास एक UIButton है जिसे मैं इसके अंदर जो भी पाठ फिट करने के लिए आकार बदलना चाहता हूं। इसकी 280 की एक सेट चौड़ाई है, लेकिन टेक्स्ट को अगली पंक्ति में लपेटना चाहिए और आवश्यकतानुसार बटन की ऊंचाई बढ़ाएं।स्क्रीन के मुकाबले टेक्स्ट को फिट करने के लिए मैं UIButton का आकार कैसे बदलूं?

मैंने वर्ड लपेटने के लिए लाइन ब्रेक सेट किए हैं और आकार की कोशिश की है, लेकिन यह केवल बटन को व्यापक, लंबवत नहीं बनाता है।

उत्तर

2

मैं इसे UIButton की एक श्रेणी में काम कर पाने में कामयाब रहे:

@interface UIButton (ExpandsVertically) 

- (CGSize)sizeThatFits:(CGSize)size; 

@end 

@implementation UIButton (Expandable) 

- (CGSize)sizeThatFits:(CGSize)size { 

    // for the width, I subtract 24 for the border 
    // for the height, I use a large value that will be reduced when the size is returned from sizeWithFont 
    CGSize tempSize = CGSizeMake(size.width - 24, 1000); 

    CGSize stringSize = [self.titleLabel.text 
         sizeWithFont:self.titleLabel.font 
         constrainedToSize:tempSize 
         lineBreakMode:UILineBreakModeWordWrap]; 

    return CGSizeMake(size.width - 24, stringSize.height); 
} 

@end 

किसी को भी इस तैयार करना न भूलें का उपयोग करता है:

myButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap; 
2

आप UIKit Additions to NSString documentation पर देख सकते हैं जिसमें फ़ॉन्ट माप के लिए विधियां एक विशिष्ट चौड़ाई या बॉक्स आकार से सीमित होती हैं।

आप बटन के शीर्षक सेट करते हैं, आप स्ट्रिंग sizeWithFont का उपयोग कर का आकलन कर सकता: forWidth: lineBreakMode:, विधि उदाहरण के लिए, और संभवतः किनारों के आसपास कुछ गद्दी के लिए अनुमति अद्यतन अपने बटन के आकार के आधार पर फ्रेम लौटे ()।

क्षमा करें मेरे पास आपके लिए एक विशिष्ट उदाहरण नहीं है।

+0

आपने मुझे सही दिशा में नेतृत्व किया ... धन्यवाद! – TigerCoding

31

आप अपने बटन इस रास्ते पर पाठ सेट सुनिश्चित करें :

[myButton setTitle:@"my title" forState:UIControlStateNormal]; 

... और [myButton sizeToFit] एक आकर्षण की तरह काम करना चाहिए।

+3

मेरे लिए काम करता है। धन्यवाद। – Prazi

+15

मुझे लगता है कि यह टाइप = कस्टम – marmor

5

[button sizeToFit] मेरे लिए काम नहीं था, लेकिन मैं (xcode 4.5) एक तरह से आईबी अकेले का उपयोग कर पाया गया है:

  1. UIButton
  2. आकार निरीक्षक खींचें में
  3. content hugging 1 पर क्लिक करें (दोनों क्षैतिज और ऊर्ध्वाधर)
  4. Width पर खींचें compression resistance 1000 (दोनों के लिए)
  5. UIButton के constraints क्लिक के तहत और बदल priority को 250
  6. ऊंचाई
  7. लिए भी यही करें आप के लिए/छोड़ दिया सही/शीर्ष के लिए गद्दी/नीचे सीमित चौड़ाई
+0

वाले बटनों पर ठीक से काम नहीं कर सकता है क्या आपने इन्सेट का उपयोग करने का प्रयास किया था? अगर मैं इंसेट का उपयोग करता हूं तो ऐसा लगता है कि अपेक्षित चौड़ाई की गणना करते समय ऑटोलायआउट ध्यान में नहीं आता है, भले ही बटन चौड़ाई बढ़ती है लेकिन पाठ को समायोजित करने के लिए पर्याप्त नहीं है + बाएं दाएं इंसेट – saurabh

0

मैं एक ऐसी ही समस्या का सामना कर रहा है, को नियंत्रित करने के लिए किया था UIButton के inset उपयोग कर सकते हैं मेरे बटन और चाहते थे कि वे टेक्स्ट की मात्रा के आधार पर लंबवत रूप से बढ़ें।

- (void)setBounds:(CGRect)bounds { 
    if (!CGRectEqualToRect(bounds, self.bounds)) { 
     [self invalidateIntrinsicContentSize]; 
    } 
    [super setBounds:bounds]; 
} 

- (CGSize)intrinsicContentSize { 
    // 
    CGSize size; 

    self.titleLabel.frame = CGRectMake(self.titleLabel.frame.origin.x, 
      self.titleLabel.frame.origin.y, 
      self.frame.size.width - self.contentEdgeInsets.left - self.contentEdgeInsets.right - self.titleEdgeInsets.left - self.titleEdgeInsets.right, 
      0); 
    size = [self.titleLabel sizeThatFits:self.titleLabel.frame.size]; 
    size = CGSizeMake(size.width, size.height + 20); 

    return size; 
} 

क्या मूल रूप से यहां होता है जो: मैं मैं क्या एप्पल डॉक्स (https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/ImplementingView/ImplementingView.html)

मैं UIButton subclassed और दो कार्यों अधिरोहित किया है में अनुभव के आधार पर एक सरल समाधान के साथ समाप्त हो गया, बटन अपने आंतरिक आकार को अमान्य कर देता है (केवल तभी जब सीमा सेट वास्तव में नया होता है - यह एक अंतहीन पाश को रोकने के लिए होता है), और जब सिस्टम आंतरिक सामग्री आकार के लिए पूछता है, तो मैं बटन की चौड़ाई के आधार पर पुन: गणना करता हूं। अतिरिक्त 20px ऊंचाई पैडिंग के लिए है। मैंने कई अन्य तरीकों की कोशिश की है, लेकिन चूंकि मेरा लेआउट ऑटोलाउट पर आधारित है, इसलिए मुझे कुछ ऐसा चाहिए जो डिवाइस को घुमाए जाने पर अपडेट करने की ज़रूरत नहीं है। यह बस काम करता है।

शुभकामनाएं! जेड

संबंधित मुद्दे