web-dev-qa-db-ja.com

UIViewをUILabelの中心にする方法

UILabelをUIViewの中心にするにはどうすればよいですか?私は次のコードを使用しています

float width = weatherView.bounds.size.width; 
float height = weatherView.bounds.size.height; 

[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)];
38
john doe

どうですか:

[self.label setCenter:view.center];
102
PengOne

ラベルがビューのサブビューの場合:

[self.label setCenter:CGPointMake(view.frame.size.width / 2, view.frame.size.height / 2)]

ラベルとビューのスーパービューが同じでない限り、view.centerを使用しないでください。

直接の接続がない場合は、ビューの中心をラベルの親の座標空間に変換する必要があります。次に、変換されたポイントでPengOneの答えを使用できます。

35
Nashenas

既に設定されているラベルがあり、そのコンテンツを中央に配置する場合は、NSTextAlignmentCenterを使用します。

cell.menuLabel.textAlignment = NSTextAlignmentCenter;
20
Alex Delgado

より良い解決策は次のとおりです。

最初:これをプログラムで行う場合、フレームといくつかのカスタマイズで初期化する必要があります。

// Simple example
int yPosition = 10;
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0, yPosition, self.view.frame.size.width, 0)];
[label setText: @"Testing..."];
[label setBackgroundColor: [UIColor clearColor]];
[label setNumberOfLines: 0];
[label sizeToFit];

2番目:ラベルをセンタリングしようとしている場合、setNumberOflinesセレクターが呼び出され、0 valueが割り当てられ、テキストに必要なすべての行が含まれ、sizeToFitメソッドが呼び出されて、適切なカスタマイズが行われ、最後に:

[self.label setCenter: CGPointMake(self.view.center.x, self.label.center.y)];

これにより、only the X axis、 そしてその Y axisは、フレームの初期化で必要なままになります。

PS:UILabelではないが、使用しているコントロールに依存する別の簡単なカスタマイズが必要な場合、またはどちらも必要ない場合、およびプログラムで中央に配置したいがinterface builder設計されています。ただsecond code

16
rokimoki

PengOne/Alex Lockwoodの答えはシンプルで便利です。回転をサポートする場合は、以下を追加して中央に配置します。

[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];
2
DenVog

UILabelが.xib経由で追加されるか、プログラムで追加される場合、2つの可能性があります。

最初のケースが.xibを介して追加された場合、 'Arrange'プロパティを使用してxibファイルサイズインスペクタータブから位置を設定できます。

2番目のケースが続く場合は、--- [self.label setCenter:view.center];として設定できます。

2
Nijar

このような何かがトリックを行うはずです...ラベルが中央揃えに設定され、テキスト文字列を処理するのに十分な大きさ/幅であることを確認してください。

float viewWidth = weatherView.frame.size.width;
float viewHeight = weatherView.frame.size.height;
float labelWidth = label.frame.size.width;
float labelHeight = label.frame.size.height;

float xpos = (viewWidth/2.0f) - (labelWidth/2.0f);
float ypos = (viewHeight/2.0f) - (labelHeight/2.0f);

[label setFrame:CGRectMake(xpos,ypos,labelWidth,labelHeight)];

私はあなたが求めていることをやるべきだと思います。

2
Richard Baxter