2016-11-27 3 views
1

Я использую TableView и имею TableViewCell, это мой первый раз, когда он успешно создан. Я получаю данные через Json и заполняю TableView; моя проблема в том, что все ячейки TableView имеют одинаковую высоту, и поскольку данные, которые я возвращаю, варьируются по размеру, это приводит к некоторым плохо выглядящим таблицам Cells. Например, посмотрите на изображение ниже, как я могу сделать это так, чтобы TableView Cell расширяется, если есть больше данных, например, первая ячейка ниже показывает или сокращает, если меньше данных, таких как вторая ячейка ниже, так что не так много пробелов показано на рисунке.IOS UiTableView Cells, как я могу сделать его регулируемым по высоте

enter image description here

Это как StoryBoard выглядит и элемент, который иногда может иметь много данных является сообщения Кнопки метки показан ниже. Я по существу стараюсь сделать 2 вещи: развернуть TableViewCell, если Post-Data длинна или сделать TableViewCell меньше, если данные Post-small малы.

enter image description here

и у меня есть доступ ко всем элементам

class HomePageTVC: UITableViewCell { 



    @IBOutlet weak var profile_id: UILabel! 
    @IBOutlet weak var comment: UIButton! 
    @IBOutlet weak var vote: UIButton! 
    @IBOutlet weak var time: UILabel! 
    @IBOutlet weak var post: UIButton! 
    @IBOutlet weak var fullname: UIButton! 
    @IBOutlet weak var location: UILabel! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     profile_id.isHidden = true 
     // Initialization code 
    } 

    override func setSelected(_ selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
     // post.isUserInteractionEnabled = true 

     // Configure the view for the selected state 
    } 

} 

ответ

3

Шаг1: Применить ограничения, как показано на рисунке,

enter image description here

Текстология представление ограничений показано на изображении ниже:

Вертикальные ограничения: V: | - [8] - [Полное имя] - [8] - [время] - [8] - [TextView] - [8] - |

Нет ограничений по высоте для любого из компонентов. При применении этих ограничений xCode предложит вам изменить Приоритет сопротивления сжатию содержимого до Сделайте это!

Шаг 2: снимите прокручиваемое свойство TextView

Шаг 3: Устанавливает количество строк до 0

Шага 4: В ViewDidLoad вашего контроллера Tableview (в) написать

self.tableView.rowHeight = UITableViewAutomaticDimension 
self.tableView.estimatedRowHeight = 100 

Этап 5: Не писать heightForRowAtIndexPath делегата :)

Вот и все :)

Надеется, что это помогает

+0

Совершенно верно, что это сработало – user1591668

1

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

@interface SomeTableViewController() 

@property (strong, nonatomic) NSMutableDictionary *cellHeightsDictionary; 

@end 

@implementation SomeTableViewController 

- (NSMutableDictionary *)cellHeightsDictionary { //setter 
    if (!_cellHeightsDictionary) { 
     _cellHeightsDictionary = [[NSMutableDictionary alloc]init]; 
    } 
    return _cellHeightsDictionary; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSIndexPath *key = indexPath; 
    NSNumber *height = @(cell.frame.size.height); 
    //store the pre-calculated cell height and index path to the dictionary 
    [self.cellHeightsDictionary setObject:height forKey:key]; 
} 

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSNumber *height = [self.cellHeightsDictionary objectForKey:indexPath]; 

    if (height) { //load the height from dictionary for this index path 
     return height.floatValue; 
    } 

    return UITableViewAutomaticDimension; 
} 

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