Как я могу программно установить вертикальное выравнивание UIButton - iOS - PullRequest
17 голосов
/ 14 декабря 2011

Я знаю, как установить вертикальное выравнивание кнопки с 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 кнопки (мне не нужен внешний вид по умолчанию).

Ответы [ 5 ]

20 голосов
/ 28 ноября 2013

Вы можете выровнять (горизонтальный и вертикальный) текст кнопки следующим образом:

        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];
9 голосов
/ 14 декабря 2011

contentVerticalAlignment это путь.Может быть, как вы создаете кнопку.Попробуйте это:

 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 button.frame = CGRectMake(10, 10, 110, 130);
 // rest of your code
 // don't release button explicitly
1 голос
/ 22 февраля 2013

Вы можете легко манипулировать внутренней текстовой меткой UIButton. Вот как вы можете это сделать:

  1. установить текст кнопок на @ "" (пустая строка)
  2. создать новую UILabel и настроить ее кадр
  3. вставить созданную UILabel в виде кнопок как подпредставление
  4. Это сделано. Теперь вы можете программно установить положение внутреннего UILabel с изменением свойства фрейма.
1 голос
/ 15 декабря 2011

Проблема заключалась в использовании

button.titleLabel.textColor = [UIColor grayColor];

вместо

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

В другом месте в моем коде все еще возникают проблемы с выравниванием текста по вертикали, но у меня получился базовый примертак что я должен быть в состоянии получить более сложную версию, если я посмотрю на нее больше.Возможно, есть другие методы, которые я использую, например button.titleLabel.textColor, которые делают вертикальное выравнивание не работающим ...

Обновление Первоначально проблема была в том, что моя кнопка была слишком короткой (кнопкавысота).

The word `husband' is in the button

Слово husband находится в кнопке, которая в настоящее время вертикально выровнена по низу.Но поскольку высоты кнопки недостаточно, это не очевидно.Несмотря на то, что по умолчанию заголовки и вставки содержимого равны нулю, не похоже, что заголовок может быть заподлицо с нижней частью.Похоже, около 5 пикселей для меня.Я проверил шрифт меньшего размера, чтобы убедиться, что это правильно.

К сожалению, вертикальное выравнивание текста по верху, похоже, ничего не меняет ...

0 голосов
/ 03 сентября 2015

Я нашел лучший способ, который работает для меня. Я использую нестандартный шрифт, поэтому выравнивание немного ухудшилось, как в ответе Линдона Фокса выше.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...