Как я могу программно установить вертикальное выравнивание 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, также является хорошей идеей.