コンテナUIView
とUILabel
. コンテナー ビューのサイズを設定したら、テキストを に追加し、ラベルを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];