我在mainStoryboard上有一个带有两个自定义单元格的tableView。我想减少两个单元格之间的间距。 我试图找到答案,但找不到任何答案。我在下面添加了图片和代码。
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate {
@IBOutlet var tblStoryList: UITableView!
var array = PLIST.shared.mainArray
override func viewDidLoad() {
super.viewDidLoad()
//spacing between header and cell
self.tblStoryList.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0)
//delete separator of UITableView
tblStoryList.separatorStyle = .none
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.array.count + 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell", for: indexPath) as! HeaderCell
cell.headerTitle.text = "First Stage"
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: "StoryTableviewCell", for: indexPath) as! StoryTableviewCell
//making plist file
let dict = self.array[indexPath.row - 1]
let title = dict["title"] as! String
let imageName = dict["image"] as! String
let temp = dict["phrases"] as! [String:Any]
let arr = temp["array"] as! [[String:Any]]
let detail = "progress \(arr.count)/\(arr.count)"
//property to plist file
cell.imgIcon.image = UIImage.init(named: imageName)
cell.lblTitle.text = title
cell.lblSubtitle.text = detail
cell.selectionStyle = UITableViewCellSelectionStyle.none
return cell
}
标题单元格
import UIKit
class HeaderCell: UITableViewCell {
@IBOutlet weak var headerTitle: UILabel!
override func layoutSubviews() {
super.layoutSubviews()
headerTitle.layer.cornerRadius = 25
headerTitle.layer.masksToBounds = true
}
}
答案 0 :(得分:2)
我认为您已在heightForRowAt indexPath
方法中为单元格设置了一些静态高度,将其设置为UITableViewAutomaticDimension
。并estimatedHeightForRowAt indexPath
将其设置为静态值以获得更好的性能。
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 40 //expected minimum height of the cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
不要忘记你需要设置"正确的约束"通过此方法获得所需的结果。需要约束来让表格单元知道它的高度。
答案 1 :(得分:0)
试试这个..
self.tableView.rowHeight = 0; // in viewdidload
[self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; // in viewdidload
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 0.01f;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return <your header height>;
}
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
return [[UIView alloc] initWithFrame:CGRectZero];
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
return <your header view>;
}
也有表seprator为none。
答案 2 :(得分:0)
您需要相应地返回每个单元格的高度。例如
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
// return height for first row, i.e
return 40
}
// return height for other cells. i.e
return 90
}
答案 3 :(得分:0)
您可以使用Autolayout表格视图设置每个单元格高度动态的表格将从Autolayout获取单元格高度 因为你不需要写这个2方法
删除此方法
tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) ->
CGFloat
{
}
在ViewDidload方法中写下这一行
self.tblView?.rowHeight = UITableViewAutomaticDimension
self.tblView?.estimatedRowHeight = 60
并设置您想要保留的Autolayout的imageview底部空间,例如10,底部布局的设置关系大于或等于设置优先级为252而不是1000
你将在我的屏幕截图中清楚地了解这一点以及如何做到这一点在所有自定义单元格中这样做你可以设置高度动态不需要计算每个单元格的高度而不需要返回