sizeToFit работает странно - PullRequest
       5

sizeToFit работает странно

3 голосов
/ 19 декабря 2011

У меня есть сегмент кода, который выполняется каждый раз, когда происходит изменение базы данных. По сути, у меня есть метка внутри родительского представления. Метка обновляется одним из множества сообщений о состоянии, каждое из которых находится в отдельной строке, оканчивающейся новой строкой (\ n). Каждое сообщение о статусе должно быть только в одной строке и не повторяться.

Проблема, с которой я столкнулся, заключается в том, что все работает нормально, когда View сначала перезагружается. Однако, когда я нахожусь на экране и происходит изменение в фоновом режиме, время от времени сообщение о состоянии отображается в нескольких строках. В то время как sizeToFit отлично справляется с созданием метки так же высоко, как и родительский вид, но она плохо работает с точки зрения ширины. То есть он разбивает текст на несколько строк, а не только на разрывы строк.

Что я могу сделать?

self.messageLabel.text = message; //lets get the status message.
        [self.messageLabel sizeToFit];
        [self.messageLabel setNeedsDisplay];
        CGRect frame = [self.messageView frame];
        frame.size.height = self.messageLabel.bounds.size.height;
        self.messageView.frame = frame;
        self.messageLabel.center = CGPointMake(CGRectGetMidX(self.messageView.bounds), CGRectGetMidY(self.messageView.bounds)-(self.messageView.cornerRadius/4));
        self.messageLabel.backgroundColor = [UIColor orangeColor];
        [self.messageView setNeedsDisplay];

Ответы [ 2 ]

1 голос
/ 12 октября 2012

Кажется, это происходит каждый раз, когда размер кадра изменяется после начальной операции. Предположительно текущий размер кадра используется при выборе нового размера в -sizeToFit. Обходной путь, который я использую, состоит в том, чтобы установить рамку представления на заранее определенный размер перед каждым вызовом sizeToFit, например:

myLabel.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.width.height);
[myLabel sizeToFit];
1 голос
/ 19 декабря 2011

Чтобы определить размер, который должен иметь ваша метка, вам нужно изучить методы размера NSString. Есть несколько из них, которые могут сказать вам размер строки, которой будет присвоен шрифт, и различные ограничения.

Например, [@"string" sizeWithFont: forWidth: lineBreakMode:]; вернет CGSize, который вы затем сможете использовать для соответствующего размера этикетки.

Кроме того, я считаю, что UILabel плохо обрабатывает строки с несколькими строками. Возможно, вам лучше написать собственное подпредставление UIView, которое может обрабатывать несколько строк текста, каждая со своим собственным ярлыком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...