2015-02-18 5 views
2

У меня есть вид с UILabel в отделенном файле nib. Я загрузить этот файл nib в пределах viewWillAppear: метода в UIViewController, и я пытаюсь установить textAlignment свойство UILabel там, таким образом:NSTextAlignmentCenter для UILabel не работает

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    NSArray* views = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil]; 
     for (UIView *view in views) { 
      if([view isKindOfClass:[UIView class]]) 
      { 
       self.customView = (MyView *)view; 

       ((MyView *)self.customView).myLabel.textAlignment = NSTextAlignmentCenter; 

       ((MyView *)self.customView).myLabel.text = @"My text"; 
       [((MyView *)self.customView).myLabel sizeToFit]; 

       [self.view addSubview:self.customView]; 
      } 
     } 
} 

Но когда я запустить приложение, текст не по центру , даже если я установил выравнивание в nib (я вижу текст, центрированный в IB Xcode). Это приложение для iOS 7+, и я использую Xcode 6.1.1. Почему это не может работать?

Благодаря

+0

не должно быть , он отлично работает. – gabbler

+0

, если u вызывает метод 'sizeToFit', тогда размер фрейма' Label' изменится на 'text'. так что это не сработает. – Nagarajan

ответ

4

Я предполагаю, что проблема исходит от:

[((MyView *)self.customView).myLabel sizeToFit]; 

Центрирование не меняет frame.origin.x вашей этикетки. Но если вы примените sizeToFit, все содержимое будет сосредоточено в меньшей зоне (без изменения смещения x), и у вас появится ощущение, что оно больше не сосредоточено.

+0

Я пересчитываю X для метки после установки ее размера, потому что мне нужно соответствовать высоте метки ... теперь она отображается правильно, спасибо. Благодаря @LlamaGoingNorth, а также – AppsDev

0
[((MyView *)self.customView).myLabel sizeToFit]; 

удалить эту линию ...

+0

Это выглядит устаревшим, поскольку iOS 7 ... – AppsDev

+0

[((MyView *) self.customView) .myLabel sizeToFit]; удалите эту строку только – Chandan

2

Вы вызываете [((MyView *)self.customView).myLabel sizeToFit]; и из документов sizeToFit «Изменяет размер и перемещает вид ресивера, поэтому он просто закрывает его просмотры».

Вы не должны иметь возможность центрировать текст в UILabel, если текст заполняет ярлык.

Попробуйте удалить этот вызов метода и посмотреть, что произойдет.

0

Запись эта строка кода

((MyView *)self.customView).myLabel.textAlignment = NSTextAlignmentCenter; 

после этого один

[self.view addSubview:self.customView]; 
2

Для UILabels с NSTextAlignmentCenter можно центрировать метку после, как это:

float w = self.view.frame.size.width; 

title.text = @"What do you want to say?"; 

[title sizeToFit]; 

title.frame = CGRectMake((w-title.frame.size.width)/2, title.frame.origin.y, title.frame.size.width, title.frame.size.height); 
Смежные вопросы