在我的视图控制器中,我有一个tableView
和加班我选择我的单元格tableview
移动有点上升我不知道为什么会发生这种情况,我试图找出它为什么会发生但是我一无所获。下面是我的代码,如果有任何机构可以找出什么是错的,那么它对我有用。
奥特莱斯和变量:
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var headerView: UIView!
@IBOutlet var verticalSpaceConstraint: NSLayoutConstraint!
var lastVerticalOffset: CGFloat = 0
ViewDidLoad:
中的
tableView.contentInset = UIEdgeInsets(top: headerViewOriginalHeight, left: 0, bottom: 0, right: 0)
tableView.scrollIndicatorInsets = tableView.contentInset
lastVerticalOffset = tableView.contentOffset.y
...........
footerView.addSubview(footerLabel)
footerView.addSubview(footerRetryButton)
footerView.addSubview(activityIndicatorView)
self.tableView.tableFooterView = footerView
代表:
extension myViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return reviewsArray.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! TagDetailTableViewCell
..............................
return cell
}
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath == selectedIndexPath {
return UITableViewAutomaticDimension
} else {
return 100
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.beginUpdates()
if indexPath == selectedIndexPath {
selectedIndexPath = NSIndexPath()
}else {
selectedIndexPath = indexPath
}
tableView.endUpdates()
print( "tableView ORIIGN Y AFETER ", tableView.contentOffset.y)
self.tableView.separatorStyle = .None
self.tableView.separatorStyle = .SingleLine
}
}
答案 0 :(得分:0)
您将在DidSelect方法中删除tableView Reload的代码。删除tableView.beginUpdates()
和tableView.endUpdates()
,现在只重新加载TableView的单个单元格。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath == selectedIndexPath {
selectedIndexPath = NSIndexPath()
}else {
selectedIndexPath = indexPath
}
NSArray* rowsToReload = [NSArray arrayWithObjects:indexPath, nil];
[myUITableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone];
self.tableView.separatorStyle = .None
self.tableView.separatorStyle = .SingleLine
}
答案 1 :(得分:0)
从tableView.beginUpdates()
方法移除tableView.endUpdates()
和didselectrow
。你不需要在这种情况下使用它!
管理数组以跟踪所选行并相应地管理cellforrow
并从didselectrow
重新加载表格。
或在viewDidload
尝试
self.automaticallyAdjustsScrollViewInsets = false