2011-07-19 31 views
35

Tôi làm cách nào để căn giữa nhãn UIL trên UIView? Tôi đang sử dụng đoạn mã sauCách căn giữa UILabel trên UIView

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

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

Trả lời

98

Làm thế nào về:

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

hoạt động nhưng nếu nhãn dài thì nó không làm trung tâm. Nó hoặc là đi sang trái hoặc phải. Tôi nghĩ vị trí được xác định bởi điểm trung tâm của con chuột. –

+10

Vâng ... chỉ khi nhãn và chế độ xem là các bản xem trước của cùng một chế độ xem. Nếu nhãn là chế độ xem phụ của chế độ xem, bạn phải bỏ qua vị trí và chỉ xem xét các giới hạn. – Eiko

+0

Tôi đã thêm UILabel bằng cách sử dụng trình thiết kế giao diện (kéo và thả). Điều đó có nghĩa là nó là một subview của xem và tôi nên sử dụng giới hạn. –

2

Something như thế này nên làm các trick ... Hãy chắc chắn rằng nhãn của bạn được thiết lập để đã làm trung tâm liên kết và đủ lớn/rộng để xử lý chuỗi văn bản của bạn.

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)]; 

Tôi nghĩ rằng nên làm những gì bạn đang yêu cầu.

+0

Tôi không biết kích thước của nhãn và do đó tôi đang sử dụng phương thức siteToFit. –

+0

Mã ở trên sẽ vẫn hoạt động miễn là bạn gọi nó sau khi bất kỳ việc khởi tạo nào bạn đang thực hiện trên nhãn –

34

Nếu nhãn là một subview của xem:

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

Không sử dụng view.center trừ nhãn và xem có SuperView cùng.

Nếu không có kết nối ngay lập tức, bạn sẽ phải chuyển trung tâm của chế độ xem thành không gian tọa độ của phụ huynh của nhãn. Sau đó, bạn có thể sử dụng câu trả lời của PengOne với điểm được chuyển đổi.

15

Một giải pháp tốt hơn posible là:

Đầu tiên: Nếu bạn đang làm điều này lập trình bạn sẽ cần phải khởi tạo với khung và một số tùy chỉnh:

// 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]; 

Thứ hai: Nếu một nhãn những gì bạn đang cố gắng căn giữa bạn chỉ có thể chạy sau khi chọn setNumberOflines chọn và được gán 0 value, văn bản của bạn sẽ có tất cả các dòng cần thiết và phương thức sizeToFit được gọi để có tuỳ chỉnh tốt và cuối cùng:

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

Điều này sẽ trung tâm only the X axisY axis sẽ vẫn như bạn mong muốn trong quá trình khởi tạo khung.

PS: Nó cũng có giá trị nếu không phải là một UILabel nhưng phụ thuộc vào sự kiểm soát bạn đang sử dụng sẽ cần một tùy biến đơn giản hay không, và nếu bạn chỉ muốn tập trung theo chương trình nhưng interface builder thiết kế, chỉ cần chạy second code.

+1

'self.view.frame.width' phải là' self.view.frame.size.width' –

1

Có hai khả năng nếu UILabel của bạn được thêm qua .xib hoặc được thêm bằng chương trình khác.

Nếu trường hợp đầu tiên tức là thêm vào thông qua .xib sau đó bạn có thể thiết lập vị trí từ file xib tab kích thước thanh tra với 'Sắp xếp' tài sản

Và nếu trường hợp thứ hai kéo dài thì bạn có thể thiết lập như --- [tự. label setCenter: view.center];

2

PengOne/Alex Câu trả lời của Lockwood rất đơn giản và hữu ích. Nếu bạn có ý định để hỗ trợ luân chuyển, bổ sung như sau để giữ cho nó làm trung tâm:

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

Sử dụng NSTextAlignmentCenter nếu những gì bạn có là nhãn đã được thiết lập và bạn muốn tập trung nội dung của nó.

cell.menuLabel.textAlignment = NSTextAlignmentCenter; 
+0

Đây là cách tốt nhất câu trả lời, có khung nhãn được căn giữa là không đủ để căn giữa văn bản, rất hữu ích nếu các nhãn của bạn được bản địa hóa! – gabry

+0

Tôi nghĩ rằng đó có thể là câu trả lời đúng cho những gì OP muốn làm. Những gì tôi muốn làm. –

Các vấn đề liên quan