3

コンテナUIViewUILabel. コンテナー ビューのサイズを設定したら、テキストを に追加し、ラベルをUILabel呼び出して、コンテナー ビューのサブビューとしてラベルを追加します。sizeToFit

次に、次のコードを使用して、ラベルをコンテナー ビュー内の中央に配置します。

viewCountLabel.frame = CGRectMake(viewCountContainer.frame.size.width/2 - viewCountLabel.frame.size.width/2, viewCountContainer.frame.size.height/2 - viewCountLabel.frame.size.height/2, viewCountLabel.frame.size.width, viewCountLabel.frame.size.height);

これは、何かをスーパービュー/コンテナの中央に配置するための非常に標準的なコードであり、常にうまく機能します。

しかし、今私は小さな問題を抱えています。このラベルのテキストは単純な数字です。1、9、15、22 などの可能性があります。

私の問題は、すべてを中央に配置すると、技術的には完全に中央に配置されていても、一部の数値が中央から外れて見えることです。

以下は、コンテナとラベルの両方に境界線を付けた例の写真で、完全に中央に配置されていることがわかります。

ここに画像の説明を入力

しかし、これは境界線なしでどのように見えるかです:

ここに画像の説明を入力

技術的には中央15にあるように見えません。少し右に寄ったように見えます。x の値から 2 または 3 を引くと、視覚的に中央に表示されますが、それが問題であることがわかります。

このようなラベルのさまざまな値を「視覚的に中央揃え」にするロジックをどのように設定できますか? ifテキスト値に基づいて一連のステートメントを設定するのはやり過ぎで、問題に応急処置を適用するだけのように感じます。

私も使用NSTextAlignmentCenterしてみましたが、違いはありません。NSTextAlignmentCenter使い方が間違っているのか、潜在的な問題があるのか​​ わかりませんsizeToFit

ラベルの青い境界線のすべての辺に余分なスペースがあることに気付くでしょうが、この問題で最も重要なのは、左右に余分なスペースがあることです。それがこの問題の原因である可能性があるように感じますが、それを修正する方法や、それが問題なのかどうかはわかりません.

これが私のコードです:

// Setup view count label container
UIView *viewCountContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 95, 95)];
viewCountContainer.frame = CGRectMake(self.view.frame.size.width/2 - viewCountContainer.frame.size.width/2, 87, viewCountContainer.frame.size.width, viewCountContainer.frame.size.height);


// Setup + add number label to container
UILabel *viewCountLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, self.pushModal.frame.size.width, 95)];
viewCountLabel.textAlignment = NSTextAlignmentCenter;
viewCountLabel.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:72];
viewCountLabel.textColor = [UIColor colorWithRed:0.278 green:0.278 blue:0.278 alpha:1];
viewCountLabel.text = [NSString stringWithFormat:@"%d", viewCount];
[viewCountLabel sizeToFit];

// Center the label to it's super view (viewCountContainer)
viewCountLabel.frame = CGRectMake(viewCountContainer.frame.size.width/2 - viewCountLabel.frame.size.width/2, viewCountContainer.frame.size.height/2 - viewCountLabel.frame.size.height/2, viewCountLabel.frame.size.width, viewCountLabel.frame.size.height);

[viewCountContainer addSubview:viewCountLabel];
[self.view addSubview:viewCountContainer];
4

2 に答える 2

1

残念ながら、これを行う「完璧な」方法はありません。ラベルに文字間隔を追加し、その幅をスーパービューの幅と中央揃えに設定しようとしましたが、これを動的に実行してこの方法で完璧にすることはできません。

これが毎回完璧であることを確認できる唯一の方法は、最初に UILabel を作成し、次にプログラムでその周りに円を描き、ラベルを中央に配置することです。

それまたは、すべての数値にロジックを追加し、視覚的にそのように中央に配置するという難しい方法です。

于 2015-05-07T23:50:25.563 に答える