Как центрировать UILabel на UIView - PullRequest
38 голосов
/ 20 июля 2011

Как я могу центрировать UILabel на UIView? Я использую следующий код

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

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

Ответы [ 7 ]

102 голосов
/ 20 июля 2011

Как насчет:

[self.label setCenter:view.center];
35 голосов
/ 10 июля 2012

Если метка является подпредставлением просмотра:

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

Не используйте view.center, если метка и представление не имеют одинакового суперпредставления.

Если непосредственное соединение отсутствует, вам придется преобразовать центр представления в координатное пространство родителя метки. Тогда вы могли бы использовать ответ PengOne с преобразованной точкой.

20 голосов
/ 10 апреля 2015

Используйте NSTextAlignmentCenter, если у вас уже есть метка, и вы хотите центрировать ее содержимое.

cell.menuLabel.textAlignment = NSTextAlignmentCenter;
16 голосов
/ 13 мая 2013

Лучшее возможное решение:

Первый: Если вы делаете это программно, вам нужно будет выполнить инициализацию с помощью фрейма и некоторых настроек:

// 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 останется так, как вам нужно при инициализации кадра.

PS: Это также верно, если не для UILabel, но в зависимости от используемого вами элемента управления потребуется другая простая настройка или ни того, ни другого, и если вы хотите только программно центрировать, но сконструированы interface builder, просто нужно запустить second code.

2 голосов
/ 26 октября 2014

PengOne / Алекс Локвуд ответ прост и полезен. Если вы намереваетесь поддерживать вращение, добавьте следующее, чтобы держать его по центру:

[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];
2 голосов
/ 30 сентября 2013

Существует две возможности, если ваша UILabel добавлена ​​через .xib или добавлена ​​программно.

Если первый случай, то есть добавлен через .xib, вы можете установить положение на вкладке инспектора размера файла xib с помощью свойства 'Arrange'

А если второй случай не исчезнет, ​​вы можете установить как- [self.label setCenter: view.center];

2 голосов
/ 20 июля 2011

Что-то вроде этого должно сработать ... Убедитесь, что ваша метка настроена на выравнивание по центру и достаточно большая / широкая для обработки вашей текстовой строки.

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

Я думаю, что это должно сделатьчто ты просишь.

...