Как я могу программно установить вертикальное выравнивание UIButton - iOS
Я знаю, как установить вертикальное выравнивание кнопки с IB; см. здесь. Но я не могу сделать это программно... Это одна из вещей, которые я пробовал:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 110, 130)];
[button setTitle:@"Align" forState:UIControlStateNormal];
button.backgroundColor = [UIColor whiteColor];
button.titleLabel.textColor = [UIColor grayColor];
[button setContentVerticalAlignment:UIControlContentVerticalAlignmentBottom];
[self.view addSubview:button];
[button release];
Я также пробовал вставки...
Но выравнивание не изменится.
Обратите внимание, что я хочу сохранить CustomStyle кнопки (я не хочу, чтобы по умолчанию выглядел).
Ответы
Ответ 1
Проблема заключалась в использовании
button.titleLabel.textColor = [UIColor grayColor];
вместо
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
В другом месте моего кода у меня все еще возникают проблемы с вертикальным выравниванием текста, но у меня есть основной пример, поэтому я должен иметь возможность получить более сложную версию, если я посмотрю на нее больше. Возможно, есть и другие методы, которые я использую как button.titleLabel.textColor, которые делают выравнивание по вертикали неработоспособным...
Обновление
Первоначальная проблема была на самом деле потому, что моя кнопка была слишком короткой (высота кнопки).
![The word `husband' is in the button]()
Слово husband
находится в кнопке, которая в настоящее время выровнена по вертикали в нижней части. Но так как высоты кнопки недостаточно, это не очевидно. Несмотря на то, что значение по умолчанию для надписей и вложений содержимого равно нулю, похоже, что заголовок может быть скрытым от нижней. Это примерно 5 пикселей. Я проверил с меньшим шрифтом, чтобы убедиться, что это правильно.
К сожалению, вертикальное выравнивание текста в верхней части ничего не меняет...
Ответ 2
Вы можете выравнивать (горизонтально и вертикально) текст кнопки таким образом:
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 70)];
button.backgroundColor = [UIColor whiteColor];
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
button.contentVerticalAlignment = UIControlContentVerticalAlignmentBottom;
[button setTitle:@"Align" forState:UIControlStateNormal];
[self.container addSubview:button];
Ответ 3
contentVerticalAlignment
- путь. Может быть, как вы создаете кнопку. Попробуйте следующее:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(10, 10, 110, 130);
// rest of your code
// don't release button explicitly
Ответ 4
Вы можете легко манипулировать внутренней текстовой меткой UIButton.
Вот как вы можете это сделать:
- установить кнопки text в @"" (пустая строка)
- создать новый UILabel и отрегулировать его рамку
- Вставка создала представление UILabel внутри кнопок как subview
- Сделано. Теперь вы можете программно установить положение внутреннего
UILabel с изменением его свойства кадра.
Ответ 5
Я нашел лучший способ, который работает для меня. Я использую пользовательский шрифт, поэтому выравнивание немного утихло несколькими, как в ответе lindon fox выше.
Внутри вашего подкласса UIButton:
- (void)layoutSubviews {
[super layoutSubviews];
if (UIEdgeInsetsEqualToEdgeInsets(UIEdgeInsetsZero, self.titleEdgeInsets)) {
// adjust top, left bottom, and right to fit your needs
self.titleEdgeInsets = UIEdgeInsetsMake(top, left, bottom, right);
}
}
Я согласен с другими ответами, что использование contentVerticalAlignment
, установленное в UIControlContentVerticalAlignmentCenter
, также является хорошей идеей.