frame.origin 选择 Table 单元格时视图发生更改错误
frame.origin Change error on View when Table Cell selected
预期行为
一个 点击Table 单元格将向上滑动一个视图(250 像素高)进入视图。点击另一行将更新与点击的行对应的视图信息。点击同一行将向下滑动视图。
出现错误
- 第一次点击被识别(并且 frame.origin 的数学变化),但是视图 没有 移动。需要在同一单元格上第二次点击才能使视图向上滑动(frame.origin 发生相同的数学运算)。
- 点击另一行会将视图移回屏幕底部,即使没有调用该操作来隐藏信息视图。
上下文
信息视图具有将其顶部置于超级视图/屏幕底部的约束。
代码示例
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.localTableView.deselectRowAtIndexPath(indexPath, animated: true)
self.mapView.selectAnnotation(self.players[indexPath.row], animated: true)
self.populateInfoView(indexPath.row)
if(self.infoView.frame.origin.y == UIScreen.mainScreen().bounds.size.height){
self.showInfoView(true)
} else if (self.previouslySelectedRow == indexPath.row){
self.hideInfoView(true)
}
self.previouslySelectedRow = indexPath.row
}
func populateInfoView(index: Int){
self.infoCoverImage.image = UIImage(named: "\(self.players[index].profileImage)")
self.infoProfileImage.image = UIImage(named: "\(self.players[index].profileImage)")
self.infoPlayerName.text = self.players[index].name
self.infoTwitterName.text = self.players[index].twitterName
}
func showInfoView(animated: Bool){
let height = self.infoView.frame.size.height
let yPos = UIScreen.mainScreen().bounds.size.height - height
UIView.animateWithDuration(0.33, animations: {
self.infoView.frame.origin.y = yPos
}, completion: { finished in
println("Always called, even if the frame does not move")
})
self.infoVisible = true
}
func hideInfoView(animated: Bool){
let height = self.infoView.frame.size.height
let yPos = UIScreen.mainScreen().bounds.size.height
if(animated == true){
UIView.animateWithDuration(0.25, animations: {
self.infoView.frame.origin.y = yPos
})
} else {
self.infoView.frame.origin.y = yPos
}
self.infoVisible = false
}
如有任何帮助,我们将不胜感激。谢谢,
[已解决] - 出现问题是因为我们使用了 frame.origin 而不是约束。如果您希望视图持续存在,使用约束。如果你有一个可重复的类似精灵的动画,使用 origin 的。
预期行为
一个 点击Table 单元格将向上滑动一个视图(250 像素高)进入视图。点击另一行将更新与点击的行对应的视图信息。点击同一行将向下滑动视图。
出现错误
- 第一次点击被识别(并且 frame.origin 的数学变化),但是视图 没有 移动。需要在同一单元格上第二次点击才能使视图向上滑动(frame.origin 发生相同的数学运算)。
- 点击另一行会将视图移回屏幕底部,即使没有调用该操作来隐藏信息视图。
上下文
信息视图具有将其顶部置于超级视图/屏幕底部的约束。
代码示例
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.localTableView.deselectRowAtIndexPath(indexPath, animated: true)
self.mapView.selectAnnotation(self.players[indexPath.row], animated: true)
self.populateInfoView(indexPath.row)
if(self.infoView.frame.origin.y == UIScreen.mainScreen().bounds.size.height){
self.showInfoView(true)
} else if (self.previouslySelectedRow == indexPath.row){
self.hideInfoView(true)
}
self.previouslySelectedRow = indexPath.row
}
func populateInfoView(index: Int){
self.infoCoverImage.image = UIImage(named: "\(self.players[index].profileImage)")
self.infoProfileImage.image = UIImage(named: "\(self.players[index].profileImage)")
self.infoPlayerName.text = self.players[index].name
self.infoTwitterName.text = self.players[index].twitterName
}
func showInfoView(animated: Bool){
let height = self.infoView.frame.size.height
let yPos = UIScreen.mainScreen().bounds.size.height - height
UIView.animateWithDuration(0.33, animations: {
self.infoView.frame.origin.y = yPos
}, completion: { finished in
println("Always called, even if the frame does not move")
})
self.infoVisible = true
}
func hideInfoView(animated: Bool){
let height = self.infoView.frame.size.height
let yPos = UIScreen.mainScreen().bounds.size.height
if(animated == true){
UIView.animateWithDuration(0.25, animations: {
self.infoView.frame.origin.y = yPos
})
} else {
self.infoView.frame.origin.y = yPos
}
self.infoVisible = false
}
如有任何帮助,我们将不胜感激。谢谢,
[已解决] - 出现问题是因为我们使用了 frame.origin 而不是约束。如果您希望视图持续存在,使用约束。如果你有一个可重复的类似精灵的动画,使用 origin 的。