![](/img/trans.png)
[英]Horizontally center UILabel + UIImageView in superview using autolayout
[英]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.