1

UILabelを水平方向の中央に配置しようとしています。これは最終的にどのように見えるかです(中心がないことに注意してください)。

ここに画像の説明を入力してください

    ReflectionView *aReflectionView = [[ReflectionView alloc]initWithFrame:CGRectMake(((self.view.bounds.size.width / 2) - 150), 40, 300, 90)];
    UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(((self.view.bounds.size.width / 2) - 150), 0, 300, 90)];
    aLabel.textAlignment = UITextAlignmentCenter;
    aLabel.text = @"1 lbs";
    self.weightLabel = aLabel;
    [aReflectionView addSubview:self.weightLabel];
    self.weightReflectionView = aReflectionView;
    [self.view addSubview:self.weightReflectionView ];
    [self.weightReflectionView  updateReflection];
4

4 に答える 4

7

プロパティは、テキストの外側ではなくtextAlignment、フレーム内にテキストを配置します。UILabel私のASCIIスキルは少し錆びていますが、これが私の言いたいことです。以下のラベルについて考えてみます。ここで、はラベル|の左端/右端を示します。

|173ポンド| =>左揃え
| 173ポンド| =>右揃え
| 173ポンド| =>中央揃え(スーパービューに関して正確に中央揃えではありません)

次に、別のビューに含まれている同じラベルについて考えます。ここで、外側は含まれているビュー[]のエッジを表し、内側|は含まれているラベルのエッジを表します。内側のラベルがスーパービュー内で正確に中央に配置されておらず、わずかに右に押されていることに注意してください(左から2スペース、右に1スペース)。

[|173ポンド| ]=>左揃え
[| 173ポンド| ]=>右揃え
[| 173ポンド| ]=>中央揃え

ラベルを常にスーパービューまたは画面内で中央揃えにする場合は、ラベルの幅がそのコンテナーと一致していることを確認してtextAlignmentから、中央に設定する必要があります。方法は次のとおりです。

[|173ポンド|]=>左揃え
[| 173ポンド|]=>右揃え
[| 173ポンド|]=>中央揃え(完全に揃え)

これは、サブビューをスーパービューの正確なサイズに一致させる一般的なケースです。プロパティを使用しboundsて簡単に行うことができます。

ReflectionView *aReflectionView = [[ReflectionView alloc] initWithFrame:..];
// Use the bounds of the superview to set the subview's frame.
UILabel *aLabel = [[UILabel alloc] initWithFrame:aReflectionView.bounds];

UIデバッグのヒントとして、問題のあるビュー(ラベル)の背景を変更して、どの領域を使用しているかを正確に表示してみてください。これは通常、このような多くの問題の解決に役立ちます。

于 2012-04-08T01:03:14.007 に答える
2

デバッグの目的で、とを設定して、backgroundColorそれらが配置されている場所を確認してください。aLabelaReflectionView

aLabel.backgroundColor = [UIColor redColor];
aReflectionView.backgroundColor = [UIColor blueColor];

aReflectionViewがスーパービュー内で適切に中央に配置されていることがわかりますが、そのaLabel中に含まれているはそうではありません。なぜだめですか?この行のために:

UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(((self.view.bounds.size.width / 2) - 150), 0, 300, 90)];

aLabelは内に含まれているため、の境界ではなく、境界aReflectionView内の中央に配置する必要があります。右にスクロールして変更を確認します。aReflectionViewself.view

UILabel *aLabel = [[UILabel alloc]initWithFrame:CGRectMake(((aReflectionView.bounds.size.width / 2) - 150), 0, 300, 90)];

aLabelあなたの目的のために、単に記入する方が良いかもしれませんaReflectionView

UILabel *aLabel = [[UILabel alloc]initWithFrame:aReflectionView.bounds];
于 2012-04-08T01:18:57.550 に答える
0

問題は、UILabel内のテキストの配置ではなく、UILabel自体の配置です。具体的には、self.viewの幅(特に幅)に応じて中央揃えになるようにUILabelを作成しますが、それをaReflectionView(より狭く、selfの左端からオフセット)に追加します。ビューであり、すでに画面の中央に配置されています)。この場合の正味の効果は、self.viewの左端からのオフセットを2回取得することです。1回はaReflectionViewのx座標で、もう1回は入力したaLabelのx座標で取得します。 aReflectionView、これは明らかにあなたの意図ではありません。最も簡単な修正は、おそらく次のようなものです。

UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectMake(((aReflectionView.bounds.size.width / 2) - 150), 0, 300, 90)];

結論として、ラベルを配置するビューの中央に配置します。

于 2012-04-08T01:24:26.917 に答える
0

それらのグーグルのために、私は彼らのために答えを持っています。問題は、次のようにコード内で改行を指定するためのエスケープ文字がいくつかあったことです。

self.emptyLabel.text = @"No likes yet! \n\
\
\n(Like some cards to save them here)";

これにより、テキストが中心からずれて配置されました。次のように削除するだけです。

self.emptyLabel.text = @"No likes yet! \n\n(Like some cards to save them here)";
于 2015-02-23T01:09:01.553 に答える