UIView

2011-07-19 16 views
35

पर UILabel को कैसे केन्द्रित करें I UIView पर UILabel को कैसे केंद्रित कर सकता हूं? मैं निम्नलिखित कोडUIView

float width = weatherView.bounds.size.width; 
float height = weatherView.bounds.size.height; 

[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)]; 

उत्तर

98

उपयोग कर रहा हूँ कैसे के बारे में:

[self.label setCenter:view.center]; 
+0

जो काम करता है लेकिन यदि लेबल लंबा है तो यह केंद्र में नहीं है। यह या तो बाएं या दाएं चला जाता है। मैंने सोचा था कि तैनात यूलाबेल के केंद्र बिंदु से निर्धारित किया गया था। –

+10

अच्छा ... केवल तभी लेबल और दृश्य एक ही दृश्य के सबव्यूव हैं। यदि लेबल दृश्य का सबव्यूव है, तो आपको स्थान की अवहेलना करना चाहिए और केवल सीमाओं पर विचार करना चाहिए। – Eiko

+0

मैंने इंटरफेस डिजाइनर (ड्रैग और ड्रॉप) का उपयोग करके UILabel को जोड़ा। क्या इसका मतलब यह है कि यह दृश्य का एक सबूत है और मुझे सीमाओं का उपयोग करना चाहिए। –

2

कुछ इस तरह चाल करना चाहिए ... सुनिश्चित करें कि आपके लेबल संरेखण केंद्रित है करने के लिए सेट और पर्याप्त बड़ा है/किया गया है अपनी पाठ स्ट्रिंग को संभालने के लिए चौड़ा।

float viewWidth = weatherView.frame.size.width; 
float viewHeight = weatherView.frame.size.height; 
float labelWidth = label.frame.size.width; 
float labelHeight = label.frame.size.height; 

float xpos = (viewWidth/2.0f) - (labelWidth/2.0f); 
float ypos = (viewHeight/2.0f) - (labelHeight/2.0f); 

[label setFrame:CGRectMake(xpos,ypos,labelWidth,labelHeight)]; 

मुझे लगता है कि जो करना है वह करना चाहिए।

+0

मुझे लेबल के आकार को नहीं पता है और इसलिए मैं साइट टॉफिट विधि का उपयोग कर रहा हूं। –

+0

उपर्युक्त कोड अभी भी तब तक काम करना चाहिए जब आप लेबल –

34

लेबल दृश्य की एक subview है:

[self.label setCenter:CGPointMake(view.frame.size.width/2, view.frame.size.height/2)] 

का उपयोग न करें जब तक कि view.center लेबल और दृश्य वही superview है।

यदि कोई तत्काल कनेक्शन नहीं है, तो आपको दृश्य के केंद्र को लेबल के माता-पिता के समन्वय स्थान में बदलना होगा। फिर आप पेंगऑन के जवाब को परिवर्तित बिंदु के साथ उपयोग कर सकते हैं।

15

एक बेहतर posible के समाधान है:

पहले:

// Simple example 
int yPosition = 10; 
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0, yPosition, self.view.frame.size.width, 0)]; 
[label setText: @"Testing..."]; 
[label setBackgroundColor: [UIColor clearColor]]; 
[label setNumberOfLines: 0]; 
[label sizeToFit]; 

दूसरा:: एक लेबल तो आप यह कर रहे हैं, तो प्रोग्राम के रूप में आप फ्रेम के साथ प्रारंभ करने के लिए और कुछ अनुकूलन की आवश्यकता होगी जो आप केंद्र में करने की कोशिश कर रहे हैं, आप इसे setNumberOflines चयनकर्ता के नाम से चुन सकते हैं और 0 value असाइन किया गया है, आपके टेक्स्ट में सभी लाइनों की आवश्यकता होगी, और sizeToFit विधि एक अच्छा अनुकूलन करने के लिए बुलाया गया है, और अंत में:

[self.label setCenter: CGPointMake(self.view.center.x, self.label.center.y)]; 

यह only the X axis केंद्रित हो जाएगा, और के रूप में आप फ्रेम प्रारंभ में वांछित Y axis रहना होगा।

पुनश्च: यह नहीं एक UILabel लेकिन अगर नियंत्रण आप एक और सरल अनुकूलन या न की आवश्यकता होगी उपयोग कर रहे हैं पर निर्भर करता है, और यदि आप केवल केंद्र के लिए चाहते हैं प्रोग्राम के रूप में लेकिन interface builder तैयार किया गया है, बस second code चलाने की आवश्यकता भी मान्य है।

+1

'self.view.frame.width' पर जो भी प्रारंभिक कार्य कर रहे हैं, उसके बाद आप स्वयं को कॉल कर सकते हैं' self.view.frame.size.width' –

1

यदि आपकी UILabel को .xib के माध्यम से जोड़ा गया है या प्रोग्रामेटिक रूप से जोड़ा गया है तो दो संभावनाएं हैं।

पहला मामला .xib के माध्यम से जोड़ा यानी तो आप के साथ xib फ़ाइल आकार निरीक्षक टैब से स्थिति सेट कर सकते 'व्यवस्था' संपत्ति

और अगर दूसरा मामला जारी रहती है तो आप के रूप में --- [स्वयं निर्धारित कर सकते हैं। लेबल सेट केंद्र: view.center];

2

पेंगऑन/एलेक्स लॉकवुड का जवाब सरल और उपयोगी है। आप रोटेशन का समर्थन करना चाहते हैं, जोड़ने इसे रखने के लिए निम्नलिखित केंद्रित:

[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth]; 
15

NSTextAlignmentCenter उपयोग क्या आपके पास पहले से ही सेट लेबल है अगर और आप अपनी सामग्री केंद्र के लिए चाहते हैं।

cell.menuLabel.textAlignment = NSTextAlignmentCenter; 
+0

यह सबसे अच्छा है जवाब, लेबल फ्रेम केंद्रित है पाठ को केंद्रित करने के लिए पर्याप्त नहीं है, यदि आपके लेबल स्थानीयकृत हैं तो बहुत उपयोगी! – gabry

+0

मुझे लगता है कि ओपी क्या करना चाहता है यह एकमात्र सही जवाब हो सकता है। मैं यही करना चाहता था। –