Задача SetCenter для UILabel - PullRequest
       8

Задача SetCenter для UILabel

1 голос
/ 22 марта 2011

ОК, я изо всех сил пытаюсь сделать эту работу, но безуспешно. По сути, я хочу добавить UILabel в UIView и центрировать его.

Код выглядит так:

UIView *customTitleView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[customTitleView setBackgroundColor:[UIColor clearColor]];

// Screen title
CGSize constraint = CGSizeMake(200.0, 44.0f);
CGSize size = [screenTitle sizeWithFont:[UIFont boldSystemFontOfSize:20.0] 
                      constrainedToSize:constraint 
                          lineBreakMode:UILineBreakModeCharacterWrap];

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, size.width, size.height)];
[titleLabel setText:screenTitle];
[titleLabel setTextColor:[UIColor whiteColor]];
[titleLabel setFont:[UIFont boldSystemFontOfSize:20.0]];
[titleLabel setBackgroundColor:[UIColor clearColor]];

titleLabel.center = customTitleView.center;

[customTitleView addSubview:titleLabel];
[titleLabel release];

self.navigationItem.titleView = customTitleView;
[customTitleView release];  

Я ожидал, что UILabel будет находиться в центре UIView. Ну, это не так. Он как-то выровнен по правому краю и даже не близко к центру UIView.

Что я делаю не так?

1 Ответ

0 голосов
/ 22 марта 2011

Итак, вот что идет не так:

self.navigationItem.titleView = customTitleView;

Когда вы установите customTitleView в качестве заголовка для элемента навигации, рамка customTitleView изменится.customTitleView больше не будет иметь ширину 320 пикселей, но кадр titleLabel останется прежним.Таким образом, он больше не будет центрироваться.

Разве вы не можете просто установить titleLabel как titleView?Я думаю, что это должно быть центрировано автоматически.Если нет, я знаю более сложный способ ее решения.Оставьте комментарий, и я расскажу вам, как.

РЕДАКТИРОВАТЬ: Итак, вот как вы перестраиваете titleLabel после изменения кадра customTitleView.

При изменении кадра вида layoutSubviews вызывается для этого вида.Поэтому вместо того, чтобы customTitleView быть обычным UIView, вам нужно сделать его настраиваемым представлением, наследуемым от UIView.В этом пользовательском представлении вы переопределяете layoutSubviews, а в своей реализации layoutSubviews вы убедитесь, что все выровнено так, как вы хотите, на основе нового фрейма (self.frame).Я оставлю вам реализацию.

...