2014-01-11 32 views
17

我有一個基本的UILabel,我在UITableViewCell中使用。我遇到了一些奇怪的行爲,在某些單元格(並非全部)上,UILabel會得到一個灰色的頂部邊框,請參閱下面的圖片。我不確定如何解決它。UILabel在iOS7中有一個奇怪的灰色頂線/邊框,我該如何刪除它?

enter image description here

創建我的UILabel這樣的:

if (self.postText == nil) { 
    CGRect postTextRect = CGRectMake(self.profileImage.frame.origin.x + self.profileImage.frame.size.width + 5, self.username.frame.origin.y + self.username.frame.size.height, frame.size.width - self.profileImage.frame.size.width - self.profileImage.frame.origin.y -10, self.frame.size.height - self.username.frame.size.height - self.username.frame.origin.y + 40); 
    self.postText = [[UILabel alloc] initWithFrame:postTextRect]; 
    self.postText.backgroundColor = [UIColor whiteColor]; 
    self.postText.textColor = [UIColor darkGrayColor]; 
    self.postText.userInteractionEnabled = NO; 
    self.postText.numberOfLines = 0; 
    [self.containerView addSubview:self.postText]; 
} 

關於如何解決此問題的任何想法?

更新

cellForRowAtIndexPath看起來是這樣的:

- (id)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [...] 
    static NSString *postCellIdentifier = @"PostCell"; 
    PostCell *cell = [tableView dequeueReusableCellWithIdentifier:postCellIdentifier]; 
    if (cell == nil) { 
     cell = [[PostCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:postCellIdentifier]; 
    } 

    [self configureCell:cell atIndexPath:indexPath forPost:cellPost]; 
    return cell; 
} 

configureCell相關標準桿這樣的:

- (void)configureCell:(PostCell *)cell atIndexPath:(NSIndexPath *)indexPath forPost:(Post *)post 
{ 
    [...] 

    cell.username.text = cellUser.username; 
    cell.selectionStyle = UITableViewCellSelectionStyleNone; 

    CGSize maximumLabelSize = CGSizeMake(cell.postText.frame.size.width, FLT_MAX); 
    CGSize expectedLabelSize = [cell.postText.text sizeWithFont:cell.postText.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping]; 
    CGRect newFrame = cell.postText.frame; 
    newFrame.size.height = expectedLabelSize.height; 
    cell.postText.frame = newFrame; 

    CGRect containerRect = CGRectMake(5, 5, cell.containerView.frame.size.width, cell.postText.frame.size.height + cell.username.frame.origin.y + cell.username.frame.size.height + 10); 
    if (containerRect.size.height < 65) { 
     containerRect.size.height = 65; 
    } 

    cell.containerView.frame = containerRect; 
    [...] 
} 
+0

您是否嘗試過設置BG顏色清除? –

+0

@AleksanderAzizi,是的,它沒有幫助。 – Anders

+1

您是否嘗試刪除uitableviewcell分隔符? – Ilario

回答

32

我指定邊框顏色和寬度解決有同樣的問題,並通過向上舍入高度來解決它:

newFrame.size.height = ceilf(expectedLabelSize.height); 
+2

這應該被接受回答 – mkll

+3

對於Swift:ceil(expectedLabelSize.height) –

+0

嗯,我愛你。 – user1105951

0

決定使用UITextView代替。

更改UILabel的框架時,問題似乎就會發生。

Chaning驗證碼:

CGSize maximumLabelSize = CGSizeMake(cell.postText.frame.size.width, FLT_MAX); 
CGSize expectedLabelSize = [cell.postText.text sizeWithFont:cell.postText.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping]; 
CGRect newFrame = cell.postText.frame; 
newFrame.size.height = expectedLabelSize.height; 
cell.postText.frame = newFrame; 

到...

[cell.postText sizeToFit]; 

難道刪除邊框。但是,因爲我想它的內容不只是顯示出來,這就是爲什麼我改UITextView

4

得到了同樣的問題

通過到的UILabel

nameLabel.layer.borderColor = [[UIColor whiteColor]CGColor]; nameLabel.layer.borderWidth = 2.0f;

0

真正的原因是你的幀高或寬度我s不是整數或更改您的應用程序視圖的背景顏色以清除顏色。

把frame的寬度或者高度修改爲整數,或者設置背景色爲clear color即可。

1

試試這個:

 cell.postText.layer.borderColor = self.Detail.backgroundColor.CGColor; 
     cell.postText.layer.borderWidth = 1; 
4

它必須是iOS版的bug。該錯誤由標籤的浮動高度值觸發。所以,簡單,無副作用的方式來解決它轉換的浮動高度值爲int值:

(int)(label.frame.size.height) 
0

它似乎,當你改變標籤的框架屬性,設置寬度或高度出現的問題具有浮動價值。

該解決方案適用於我,將標籤的backgroundColor設置爲Clear。

目的-C:

[label setBackgroundColor:[UIColor clearColor]]; 

迅速:

label.setBackgroundColor = UIColor.clearColor() 
1

怪異灰色概述是由於背景的大小和標籤尺寸不準確相同的。

可以通過完美解決:

[myLabel sizeToFit] 
0

我有同樣的問題。只是做labelView.layer.opaque = false;固定礦。希望這會對某人有用。

相關問題