web-dev-qa-db-ja.com

UIButtonの垂直方向の配置をプログラムで設定する方法-iOS

ボタンの垂直方向の配置をIBで設定する方法を知っています。 こちら を参照してください。しかし、プログラムでそれを行うことはできません...これは私が試したことの1つです。

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を保持したいことに注意してください(デフォルトのルックアンドフィールは必要ありません)。

21
lindon fox

問題は使用でした

button.titleLabel.textColor = [UIColor grayColor];

の代わりに

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

私のコードのどこかで、テキストの垂直方向の配置にまだ問題がありますが、基本的な例を持っているので、もっと見れば、より複雑なバージョンを取得できるはずです。たぶん、button.titleLabel.textColorのように、垂直方向の配置を機能させない他の方法があるでしょう...

更新元の問題は、実際にはボタンが短すぎる(ボタンの高さ)ためでした。

The Word `husband' is in the button

Word husbandはボタンにあり、現在は下に垂直に配置されています。しかし、ボタンの高さは十分ではないため、明確ではありません。タイトルのインセットとコンテンツのインセットのデフォルトはゼロですが、タイトルを下に揃えることはできないようです。私には約5ピクセルのように見えます。これが正しいことを確認するために、より小さいフォントでテストしました。

残念ながら、テキストを上に垂直に配置しても、何も変更されないようです...

1
lindon fox

次の方法で、ボタンのテキストを(水平および垂直に)整列できます。

        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];
23

contentVerticalAlignmentはその方法です。ボタンを作成する方法かもしれません。これを試して:

 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 button.frame = CGRectMake(10, 10, 110, 130);
 // rest of your code
 // don't release button explicitly
9
XJones

UIButtonの内部テキストラベルを簡単に操作できます。ここでそれを行う方法:

  1. ボタンのテキストを@ ""(空の文字列)に設定します
  2. 新しいUILabelを作成してフレームを調整する
  3. 作成したUILabelをボタンのビュー内にサブビューとして挿入する
  4. 終わった。これで、フレームプロパティを変更して、プログラムで内部UILabelの位置を設定できます。
1
Dmitriy Lezhnev

私は私のために働くより良い方法を見つけました。私はカスタムフォントを使用しているため、上記の lindon fox's の回答のように、配置が少しずれています。

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);
      }
}

contentVerticalAlignmentUIControlContentVerticalAlignmentCenterに設定することも良いアイデアであるという他の回答にも同意します。

0
cynistersix