UIView甚至在开始从超级视图中删除后重新出现
问题描述:
我有一个问题,如果我从超级视图中删除子视图,然后当我推到另一个VC和回来所有删除的子视图重新出现在视图中我已经试过一切,并检查我的代码如果viewDidApper也是。UIView甚至在开始从超级视图中删除后重新出现
//HERE IS HOW I ADD VIEWS
func addusers() {
for user in 0...5 {
let radarButton = PRButton(frame: CGRect(x: 0, y: 0, width: itemSize.width, height: itemSize.height+14))
radarButton.profileButton?.setImage(UIImage(named: "dummy-avatar.png"), for: UIControlState())
radarButton.profileName.setTitle("test \(user)", for: .normal)
repeat {
let center = generateCenterPointInRadar()
radarButton.center = CGPoint(x: center.x, y: center.y)
} while (itemFrameIntersectsInOtherItem(radarButton.frame))
radarButton.profileButton?.addTarget(self, action: #selector(didTapUser), for: .touchUpInside)
radarButton.profileName?.addTarget(self, action: #selector(didTapUser), for: .touchUpInside)
self.addSubview(radarButton)
items.append(radarButton)
}
}
//HERE IS HOW I REMOVE VIEWS
func removeAllUsers() {
for view in self.subviews {
if view is PRButton {
view.removeFromSuperview()
}
}
items.removeAll()
}
//Remove from superview
override func removeFromSuperview() {
UIView.beginAnimations("", context: nil)
UIView.setAnimationDuration(1)
self.alpha = 0
UIView.setAnimationDidStop(Selector(("callSuperRemoveFromSuperview")))
UIView.commitAnimations()
}
fileprivate func callSuperRemoveFromSuperview() {
super.removeFromSuperview()
}
在此先感谢
答
首先要看看......
在PRButton
您覆盖removeFromSuperview()
- 但你的结构是不正确的,你永远不会真正删除视图。
这种替换:
override func removeFromSuperview() {
UIView.animate(withDuration: 1.0, animations: ({
self.alpha = 0.0
}), completion: { _ in
self.callSuperRemoveFromSuperview()
})
}
你也可以简单地调用super.removeFromSuperview()
而不是你的额外self.callSuperRemoveFromSuperview()
功能。
了解Debug View Hierarchy
功能...您会立即看到该功能。
答
我看了看测试项目。 我想我找到了问题,这是在override func removeFromSuperview()
我注释掉它和编辑removeAllUsers()
func removeAllUsers() {
for view in self.subviews {
if view is PRButton {
UIView.animate(withDuration: 1, animations: {
view.alpha = 0
}, completion: { (finished) in
view.removeFromSuperview()
})
}
}
items.removeAll()
}
现在,我看不出有任何重复的用户,而我回viewController
+0
谢谢,修复removeFromSuperview()解决了我的问题 –
您确定视图不在另一个视图容器内吗? – Edu
@Edu我相信我已经包含了一个测试项目,您可以下载并检查 –