Xcode 5'de autolayout kullanıyorum.
Tablo görünümünün yüksekliğini 200px'den büyük veya ona eşit olarak ayarlıyorum. Bunun dinamik bir boyuta sahip olmasını istiyorum. Çünkü bazen çok sayıda satır olacak, bazen birkaç satır olacak.
Ama boyut her zaman 200px'dir. Ve eğer içerik bundan daha büyükse, alt sıraları görmek için aşağı kaydırmalıyım.
Tableview dinamik boyutunu vermek için ne yapmalıyım?
Bu Xcode'un en son sürümü ile test edilir.
1) Xcode'ta storyboard'a gidin ve seçmek için tablo görünümüne tıklayın.
2) Yardımcı programlar bölmesinde (bkz. Resim 1) tablo görünümü yüksekliğinin tanımlanmış olduğundan emin olun.

3) Tablo görünümünü görüntüleyen denetleyicide, bu kısıtlamaya bir çıkış oluşturun:
Swift 3'te
@IBOutlet weak var dynamicTVHeight: NSLayoutConstraint!
Amaç C
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *dynamicTVHeight;
4) Hikaye panosunda, UITableView
ve sağdaki simgenin rengi mordan maviye değiştirdiğini doğrulayın (bkz. resim 2)

4) Ayrıca bu kodu aynı görüntü denetleyicisine koyun:
hızlı
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()
}
Hedef 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];
}
Bu probleminizi çözmeli.
Bunlar, örnek projenin iki versiyonuna, istediğinizi yapan, Objective C ve diğeri Swift 3 için olan linklerdir. Indirin ve Xcode ile test edin. Her iki proje de Xcode, Xcode 8.3.2'nin en son sürümü ile çalışır.
https://github.com/jcatalan007/TestTableviewAutolayout
https://github.com/jcatalan007/TestTableviewAutolayoutSwift
xib veya storyboard ile hücrenizi oluşturun. çıkışının içeriğini ver. şimdi CellForRowAtIndexPath olarak adlandırın. Örneğin. Hücrenin yüksekliğini Comment'in etiket metnine göre ayarlamak isterseniz.
bu yüzden size yorumlarLbl.numberOfLine = 0;
sonra ViewDidLoad içinde
self.table.estimatedRowHeight = 44.0 ;
self.table.rowHeight = UITableViewAutomaticDimension;
ve şimdi
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
voila ............ bunu yaptın ....
Programlı olarak yapılabilir. Kavram (ve kodun kendisi) aslında çok basit:
MyTableView'ın süper görünümünün updateConstraints yönteminde, myTableView öğesinin yüksekliğinin myTableView.contentSize.height öğesine eşit olması için bir kısıtlama ekleyin.
İOS 7'yi hedefleyen Xcode 6'da test edildi.
Ctrl + UITableView'ınızın yükseklik kısıtını görünüm denetleyicinizin kaynak koduna sürükleyip ona bir ad verebilirsiniz. Daha sonra ViewController'ınızın updateViewConstraints bölümünde bu kısıtlamanın sabitini tableView.contentSize.height olarak ayarlayabilirsiniz.
....
@IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint?
....
override func updateViewConstraints() {
super.updateViewConstraints()
tableViewHeightConstraint?.constant = tableView.contentSize.height
}