Ответ 1
Это протестировано с последней версией Xcode.
1) В Xcode перейдите в раскадровку и нажмите на нее, чтобы выбрать ее.
2) На панели "Утилиты" (см. рисунок 1) убедитесь, что определено ограничение высоты таблицы.
3) В контроллере представления, отображающем представление таблицы, создайте выход для этого ограничения:
В Swift 3
@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint!
В Objective C
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight;
4) В раскадровке вернитесь к ограничению высоты для UITableView
и убедитесь, что значок справа изменил цвет с фиолетового на синий (см. рисунок 2)
4) Также поместите этот код в один и тот же контроллер:
Свифта
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let height = min(self.view.bounds.size.height, tableView.contentSize.height)
dynamicTVHeight.constant = height
self.view.layoutIfNeeded()
}
Цель C
- (void)viewWillAppear:(BOOL)animated
{
// just add this line to the end of this method or create it if it does not exist
[self.tableView reloadData];
}
-(void)viewDidLayoutSubviews
{
CGFloat height = MIN(self.view.bounds.size.height, self.tableView.contentSize.height);
self.dynamicTVHeight.constant = height;
[self.view layoutIfNeeded];
}
Это должно решить вашу проблему.
Это ссылки на две версии примерного проекта, который делает то, что вы хотите, один для Objective C, а другой для Swift 3. Загрузите его и протестируйте его с помощью Xcode. Оба проекта работают с последней версией Xcode, Xcode 8.3.2.
https://github.com/jcatalan007/TestTableviewAutolayout https://github.com/jcatalan007/TestTableviewAutolayoutSwift