UILabel имеет странную серую верхнюю строку / границу в iOS7, как ее можно удалить?

17

У меня есть базовый UILabel, который я использую в UITableViewCell . Я испытываю какое-то странное поведение, в некоторых ячейках (не все) UILabel получает серое верхнее поле, см. Рисунок ниже. И я не знаю, как это исправить.

Я создаю свой 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];
}

Любые идеи о том, как исправить это?

Обновить

My 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;
    [...] 
}
    
задан Anders 11.01.2014 в 19:06
источник

8 ответов

31

У меня была такая же проблема и она была решена путем округления высоты:

newFrame.size.height = ceilf(expectedLabelSize.height);
    
ответ дан Blago 15.04.2014 в 14:00
источник
4

Вышла та же проблема

Решено, назначив цвет и ширину границы для UILabel

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

ответ дан Konda 27.02.2014 в 13:32
источник
4

Это должна быть ошибка iOS. Ошибка инициируется значением высоты поплавка метки. Таким образом, простой и не побочный эффект для решения этой проблемы - преобразование значения высоты поплавка в значение int:

(int)(label.frame.size.height)
    
ответ дан Allen 06.03.2015 в 08:46
источник
1

попробуйте следующее:

        cell.postText.layer.borderColor = self.Detail.backgroundColor.CGColor;
        cell.postText.layer.borderWidth = 1;
    
ответ дан user3016927 25.09.2014 в 11:22
источник
1

Странные серые контуры обусловлены тем, что размер фона и размер метки не являются точными.

Это можно решить отлично:

[myLabel sizeToFit]
    
ответ дан shumin 02.11.2016 в 07:41
источник
0

Вместо этого решил использовать UITextView .

Проблема возникает при изменении кадра UILabel.

Измените этот код:

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

    
ответ дан Anders 11.01.2014 в 22:20
источник
0

Настоящая причина заключается в том, что высота или ширина рамки не являются целыми или изменяют цвет фона вашего приложения, чтобы очистить цвет.

Измените ширину или высоту кадра на целое число или установите цвет фона для очистки цвета.

    
ответ дан Leonardo zhang 15.08.2014 в 06:51
источник
0

Кажется, что проблема возникает, если вы изменяете свойство фрейма метки, задаете ширину или высоту с помощью значения float.

Это решение работает для меня, устанавливая backgroundColor метки на Clear.

Objective-C:

[label setBackgroundColor:[UIColor clearColor]];

скор:

label.setBackgroundColor = UIColor.clearColor()
    
ответ дан Mara Jimenez 24.02.2016 в 08:04
источник