2015-05-07 55 views
2

我有一個容器UIViewUILabel。容器視圖大小已設置,然後我將文本添加到UILabel,在標籤上調用sizeToFit,並將標籤添加爲容器視圖的子視圖。當實際中心關閉時,將UILabel對準其超級視圖

然後我用下面的代碼中心集裝箱視圖內側的標籤:

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等

我的問題是,當我集中一切,一些數字看中心,即使他們在技術上完全居中。

下面是一個例子PIC與邊框容器和標籤兩個,所以你可以看到,他們都完全居中:

enter image description here

但這裏是它的外觀沒有國界:

enter image description here

15看起來不像它的居中,即使它在技術上是。它看起來有點偏離右邊。如果我從x值中減去2或3,它會在視覺上看起來居中,但看到這就是問題所在。

如何設置邏輯以「視覺中心化」這樣的標籤的各種值?我覺得根據文本值設置一堆if聲明是過度殺傷性的,並且只是對該問題應用了一個bandaid。

我也試過使用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]; 
+1

這真的取決於字體。你可以改變它嗎? – picciano

回答

0

不幸的是沒有「完美」的方式做到這一點。我爲標籤添加了字符間距,嘗試將其寬度設置爲超級視圖的寬度和居中等,但您永遠無法動態地完成此操作,並以此方式實現完美。

每次我都能看到這個完美的唯一方法就是如果先製作UILabel,然後以編程方式在它周圍繪製一個圓圈,然後居中放置標籤。

這或爲每個數字添加邏輯並以這種方式對其進行視覺對中的困難方式。

相關問題