我在我的应用程序中使用了自定义 UITableViewCell
,我正在尝试调整“滑动删除”按钮的框架。
这就是我正在做的:
- (void)layoutSubviews {
[super layoutSubviews];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) return;
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.0f];
for (UIView *subview in self.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString"UITableViewCellDeleteConfirmationControl"]) {
CGRect newFrame = subview.frame;
newFrame.origin.x = newFrame.origin.x - 25;
subview.frame = newFrame;
} else if ([NSStringFromClass([subview class]) isEqualToString"UITableViewCellEditControl"]) {
CGRect newFrame = subview.frame;
newFrame.origin.x = newFrame.origin.x - 25;
subview.frame = newFrame;
}
}
}
它出现在新的位置,这很棒。但是,当我单击按钮使其消失时,按钮似乎突然向左移动了大约 10 个点,然后被移除。
为什么会发生这种情况,我该如何解决?
我不熟悉您使用的动画代码,但我会尝试使用 willTransitionToState
(以及,如果需要,didTransitionToState
)而不是 layoutSubviews
在编辑 tableViewCells 期间处理动画。
从 iOS 3.0 开始,两者都可用。
将此代码放在 UITableViewCell
的子类中。它将处理来自一个 UITableViewCellStateMask
的所有转换。到另一个,您可以实现转换到每个状态所需的动画。只需根据我添加的 NSLog 在适当的位置实现您需要的动画即可。 (再次,不熟悉你的动画代码,但我确实测试过它并使用此代码看到了结果)
- (void)willTransitionToStateUITableViewCellStateMask)state {
[super willTransitionToState:state];
if (state == UITableViewCellStateDefaultMask) {
NSLog(@"Default");
// When the cell returns to normal (not editing)
// Do something...
} else if ((state & UITableViewCellStateShowingEditControlMask) && (state & UITableViewCellStateShowingDeleteConfirmationMask)) {
NSLog(@"Edit Control + Delete Button");
// When the cell goes from Showing-the-Edit-Control (-) to Showing-the-Edit-Control (-) AND the Delete Button [Delete]
// !!! It's important to have this BEFORE just showing the Edit Control because the edit control applies to both cases.!!!
// Do something...
} else if (state & UITableViewCellStateShowingEditControlMask) {
NSLog(@"Edit Control Only");
// When the cell goes into edit mode and Shows-the-Edit-Control (-)
// Do something...
} else if (state == UITableViewCellStateShowingDeleteConfirmationMask) {
NSLog(@"Swipe to Delete [Delete] button only");
// When the user swipes a row to delete without using the edit button.
// Do something...
}
}
如果您需要在这些事件之一之后发生某些事情,只需实现相同的代码,但在 didTransitionToState
中。应用相同的 UITableViewCellStateMask
。
关于ios - UITableView “swipe to delete” 按钮框架问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14325758/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |