क्या UIButton के टाइटललैब के लिए x, y स्थिति को समायोजित करना संभव है?


121

क्या ए के लिए x, y स्थिति को समायोजित करना संभव titleLabelहै UIButton?

यहाँ मेरा कोड है:

    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setFrame:CGRectMake(0.0f, 0.0f, 100.0f, 100.0f)];
    [btn setTitle:[NSString stringWithFormat:@"Button %d", i+1] forState:UIControlStateNormal];     
    [btn addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    btn.titleLabel.frame = ???

1
कृपया अन्य उत्तर चुनें ताकि हम बहुत नकारात्मक को हटा सकें। या फिर समझाएं कि आपने ऐसा क्यों किया है।
— tchrist

1
उस उत्तर को स्वीकार क्यों नहीं किया जाता है?
— एंटोनियो एमजी

जवाबों:


445
//make the buttons content appear in the top-left
[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentTop];

//move text 10 pixels down and right
[button setTitleEdgeInsets:UIEdgeInsetsMake(10.0f, 10.0f, 0.0f, 0.0f)];

और स्विफ्ट में

//make the buttons content appear in the top-left
button.contentHorizontalAlignment = .Left
button.contentVerticalAlignment = .Top

//move text 10 pixels down and right
button.titleEdgeInsets = UIEdgeInsetsMake(10.0, 10.0, 0.0, 0.0)

स्विफ्ट 5

button.contentHorizontalAlignment = .left
button.contentVerticalAlignment = .top
button.titleEdgeInsets = UIEdgeInsets(top: 10.0, left: 10.0, bottom: 0.0, right: 0.0)

3
यह निश्चित रूप से सबसे अच्छा जवाब है
— ग्रीनिसस

3
मुझे आश्चर्य है कि पूछने वाले ने दूसरा जवाब क्यों चुना। यह एक बेहतर है।
— जोशुआ

4
मुझे पहले दो पंक्तियों की भी आवश्यकता नहीं थी ... setTitleEdgeInsets:मुझे पाठ को स्थानांतरित करने के लिए आवश्यक पाया गया था।
— आर्टऑफवर्फ

यह निश्चित रूप से सही है, लेकिन इंटरफ़ेस बिल्डर का उपयोग करके पूरा करना आसान है (जैसा कि मेरे उत्तर में वर्णित है)।
— इलादलेब

पहली दो पंक्तियाँ आपके पाठ को 0,0 (x, y) में रखती हैं। यह सापेक्ष स्थिति को रोक सकता है; खासकर यदि आप xib में डिफॉल्ट अलाइनमेंट सेट करते हैं।
— जेरेट बार्नेट

40

इसे नेत्रहीन करने का सबसे आसान तरीका है कि विशेषता निरीक्षक ** (एक एक्सिब / स्टोरीबोर्ड को संपादित करते समय दिखाई देता है), " किनारे " संपत्ति को शीर्षक पर सेट करना, इसे समायोजित करना, फिर इसे समायोजित करना, फिर छवि के लिए "बढ़त" संपत्ति सेट करना और तदनुसार समायोजित करना। । यह आमतौर पर इसे कोड करने से बेहतर है, क्योंकि इसे बनाए रखना आसान है और अत्यधिक दृश्य है।

इंस्पेक्टर सेटिंग को अट्रैक्ट करें


1
अच्छा टिप बदलने के Edgeलिए Titleऔर फिर इनसेट समायोजित करें!
— डीन

भविष्य के संदर्भ के लिए, Xcode 8 के बाद से, edgeसंपत्ति सेट करने के बजाय आप शीर्षक इंस्पेक्टर को आकार निरीक्षक में समायोजित कर सकते हैं।
— dbmrq

14

UIButton से प्राप्त करें और निम्नलिखित विधि को लागू करें:

- (CGRect)titleRectForContentRect:(CGRect)contentRect;

संपादित करें:

@interface PositionTitleButton : UIButton
@property (nonatomic) CGPoint titleOrigin;
@end

@implementation PositionTextButton
- (CGRect)titleRectForContentRect:(CGRect)contentRect {
  contentRect.origin = titleOrigin;
  return contentRect;
}
@end

धन्यवाद, यह वही है जो मुझे वास्तव में चाहिए था। स्वचालित केंद्रित पर्याप्त नहीं था।
— dmzza

4

मेरी परियोजनाओं के लिए मुझे यह एक्सटेंशन उपयोगिता है:

extension UIButton {

    func moveTitle(horizontal hOffset: CGFloat, vertical vOffset: CGFloat) {
        self.titleEdgeInsets.left += hOffset
        self.titleEdgeInsets.top += vOffset
    }

}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.