Ответ 1
Проблема заключается в автозапуске, который снова изменит размер метки для вас с ограничениями, которые вы установили, когда вы создаете метку в Interface Build, к сожалению, в autolayout иерархия - это Constraints > Frame
У меня есть класс PostListTableCell, наследующий UITableViewCell, который используется как моя пользовательская ячейка в UITableView.
Мне нужно изменить размер ярлыков в ячейке, поэтому я назвал следующий метод в
- (void)layoutSubviews {
[super layoutSubviews];
[_titleLabel sizeToFit];
}
Но проблема в том, что когда UITableView загружен, _titleLabel не изменяет размер:
Но после того, как я щелкнул эту ячейку и выделил ее, название изменило размер:
Ниже приведен код для загрузки данных:
- (PostListTableCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *PostListTableCellIdentifier = @"PostListTableCell";
PostListTableCell *cell = (PostListTableCell*) [tableView dequeueReusableCellWithIdentifier:PostListTableCellIdentifier];
if (cell == nil) {
cell = [[PostListTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:PostListTableCellIdentifier];
}
Post *post = (Post*)_posts[indexPath.row];
[cell loadPost:post];
return cell;
}
Может ли кто-нибудь помочь?
Проблема заключается в автозапуске, который снова изменит размер метки для вас с ограничениями, которые вы установили, когда вы создаете метку в Interface Build, к сожалению, в autolayout иерархия - это Constraints > Frame
Прежде всего, если вы используете метод Autolayout в (viewDidLoad), который связан с UIViewController и его подклассами и ( awakeFromNib), которые связан с UIView и UITableViewCell и т.д. все представления Frames еще не были отображены, в то время как эти методы называются.
Итак, если вы хотите изменить размер любого из выходов, вы должны называть его (ViewDidAppear) для UIViewController. В UIViews и ячейках вы должны использовать:
- (void)layoutSubViews
{
[super layoutSubviews];
}
И не забудьте установить интервал в свой метод изменения размера, как в этом ответе.
установить фрейм для вашей метки
-(void)layoutSubviews
{
CGRect frame = CGRectMake(20, 30, 200, 50);
_titleLabel.frame = frame;
}