簡體   English   中英

當實際中心看起來偏離時,視覺上將 UILabel 居中到它的超級視圖

[英]Visually centering a UILabel to it's superview when the actual center looks off

我有一個容器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];

不幸的是,沒有“完美”的方法可以做到這一點。 我已經為標簽添加了字符間距,嘗試將其寬度設置為超級視圖的寬度和居中等,但您永遠無法動態地執行此操作並以這種方式使其完美。

我每次都能看到這是完美的唯一方法是,如果您首先制作 UILabel,然后以編程方式在它周圍畫一個圓圈,然后將標簽居中。

那種為每個數字添加邏輯並以這種方式在視覺上居中的硬方法。

數字可以通過使用monospacedDigitSystemFont(ofSize:weight:)textAlignment = .center

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM