क्या 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.