2015-07-16 5 views
0

создать вид ячейку пользовательских таблиц с помощью autolayout в этой картине ниже Вида изменилось при выборе ячейки TableView для прошивки

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

код:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ 
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent]; 
[cell.textLabel setText: textToSHow]; 

cell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds)); 
[cell setNeedsLayout]; 
[cell layoutIfNeeded]; 

CGSize fitSize = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
return fitSize.height; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
return 3; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent]; 
[cell.textLabel setText:textToSHow]; 
return cell; 
} 

запустить приложение:

enter image description here

при выборе ячейки:

enter image description here

Большое спасибо!

+0

Почему вы вычисляете «высоту» строки, когда все установлено с автозагрузкой? –

+0

У табличного представления есть источник данных: heightforrow , поэтому мне нужно рассчитать высоту строки самостоятельно. – congnd

+1

Это не обязательный метод ... Вы либо используете это, либо autolayout ... если вы хотите пойти с кодом, я думаю, вы можете удалить свои ограничения. –

ответ

0

IOS 8+ решение (с использованием autolayout):

Добавьте это в viewDidLoad:

self.tableView.estimatedRowHeight = 44; 
self.tableView.rowHeight = UITableViewAutomaticDimension; 

И удалить метод tableView:heightForRowAtIndexPath:.

+0

спасибо, но я хочу, чтобы мое приложение поддерживало ios7 и выше – congnd

0

Я думаю, вам нужно изменить некоторые коды в вашей существующей реализации. Попробуйте это, заменив существующий код.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize fitSize = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 
    return fitSize.height; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 3; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent forIndexPath:indexPath]; 
    [cell layoutIfNeeded]; 

    [cell.textLabel setText:textToSHow]; 
    return cell; 
} 
+0

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

+0

. Посмотрите, как heightForRowAtIndexPath вызывается, когда вы просматриваете представление таблицы. вероятно, метод, который вы используете для определения высоты, неверен. попробуйте рассчитать высоту текста в соответствии с шириной через вычисления. Это основная причина вашей проблемы. –

Смежные вопросы