問題:
ボタンのtitleEdgeInset
とUITextAlignmentLeft
を設定した後も、ボタンのタイトルは中央揃えで、左揃えではありません。
詳細:
左側に画像のあるカスタム背景を使用して、幅200pxのボタンがあります。ボタンのタイトルで画像を覆いたくないので、titleEdgeInset=UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0);
を使用してタイトルを挿入します。これにより、タイトルラベルのx位置は45pxで始まり、200pxで終わります。また、ボタンのタイトルを画像の左揃えにしたいので、textAlignment = UITextAlignmentLeft
も設定します。ただし、タイトルテキストは依然として左揃えではなく、45pxから200pxの中央に配置されます。
どうして?
関連するコードは次のとおりです。
button.titleEdgeInsets = UIEdgeInsetsMake(0.0, 45.0, 0.0, 0.0);
button.titleLabel.textAlignment = UITextAlignmentLeft;
[button setTitle:@"X"];
私のテストコード:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame = CGRectMake(20, 20, 200, 72);
UIImage *image = [UIImage imageNamed:@"rob.png"];
[button setImage:image forState:UIControlStateNormal];
button.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
[button setTitle:@"Hello" forState:UIControlStateNormal];
button.titleEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0);
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[self.view addSubview:button];
button.contentHorizontalAlignment
ではなくbutton.titleLabel.textAlignment
。私の結果:
ボタンのcontentHorizontalAlignmentプロパティを設定すると、機能します。
YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Swift 4.
YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignment.center
TitleLabelに背景色を配置します。それに合わせてサイズが調整されているので、テキストの配置は問題になりません。必要なだけです。修正する必要があるのは、ラベル自体の位置です。 UIButtonを拡張して、それを正しくするためにlayoutSubviewsをオーバーライドする必要がある場合があります。ラベルが中央に配置されているボタン以外は見たことがありません。
ボタンのcontentHorizontalAlignmentプロパティを設定します。
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
Swift
ContentHorizontalAlignmentプロパティを設定して作業を行います。ありがとう
yourButton.contentHorizontalAlignment = .left
ボタンのセッターをオーバーライドし、セッターでcontentHorizontalAlignmentプロパティを設定してみます。
-(UIButton *)yourButton {
[_yourButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
return _yourButton;
}