我的UITableView中有隐藏的分隔线,当我拖动单元格时,阴影会出现在上下边框中。如何隐藏它?请看示例:
非常感谢!
lstz6jyr1#
所以,我有答案,只是UITableView的子类与方法:
- (void) didAddSubview:(UIView *)subview { [super didAddSubview:subview]; if([subview.class.description isEqualToString:@"UIShadowView"]) { subview.hidden = YES; } }
qlvxas9a2#
无阴影表格视图.m
#import "NoShadowTableView.h" @interface NoShadowTableView () { // iOS7 __weak UIView* wrapperView; } @end @implementation NoShadowTableView - (void) didAddSubview:(UIView *)subview { [super didAddSubview:subview]; // iOS7 if(wrapperView == nil && [[[subview class] description] isEqualToString:@"UITableViewWrapperView"]) wrapperView = subview; // iOS6 if([[[subview class] description] isEqualToString:@"UIShadowView"]) [subview setHidden:YES]; } - (void) layoutSubviews { [super layoutSubviews]; // iOS7 for(UIView* subview in wrapperView.subviews) { if([[[subview class] description] isEqualToString:@"UIShadowView"]) [subview setHidden:YES]; } } @end
fcy6dtqo3#
快速破解是子类UITableViewCell和添加方法:
override func layoutSubviews() { super.layoutSubviews() superview?.subviews.filter({ "\(type(of: $0))" == "UIShadowView" }).forEach { (sv: UIView) in sv.removeFromSuperview() } }
wh6knrhe4#
这个代码对我有效!
import UIKit class NoShadowTableView: UITableView { override func didAddSubview(_ subview: UIView) { super.didAddSubview(subview) if "\(type(of: subview))" == "UIShadowView" { subview.removeFromSuperview() } } }
yrdbyhpb5#
我在使用默认的UITableView重排序控件时遇到了类似的问题,所以我使用了这个外部的第三方库来解决我的问题。https://github.com/shusta/ReorderingTableViewController希望这能帮上忙
snvhrwxg6#
Swift 3实施(删除了iOS6支持)
import UIKit class NoShadowTableView: UITableView { weak var wrapperView: UIView? override func didAddSubview(_ subview: UIView) { super.didAddSubview(subview) if wrapperView == nil && "\(type(of: subview))" == "UITableViewWrapperView" { wrapperView = subview } } override func layoutSubviews() { super.layoutSubviews() wrapperView?.subviews.forEach({ view in if "\(type(of: view))" == "UIShadowView" { view.isHidden = true } }) } }
gab6jxml7#
对我来说,对UISadowView的破解并不奏效。我在iOS 10上检查了解决方案。但cell类中的一行代码成功了:
override func layoutSubviews() { super.layoutSubviews() self.subviews.filter{ $0 is UIImageView }.forEach { $0.isHidden = true } }
n3h0vuf28#
Swift 4解决方案;使用扩展的uitableviewcontroller,因为现在阴影在表格中,并且仅在移动单元格时添加。
class UITableViewControllerEx: UITableViewController { override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() view.subviews.filter({ String(describing: type(of: $0)) == "UIShadowView" }).forEach { (sv: UIView) in sv.isHidden = true } } }
r8xiu3jd9#
所有其他的答案似乎都是使用私有API,这显然不是一件好事。此外,他们似乎不再工作(至少在iOS 16上)。我发现使用UIDragPreviewParameters可以让我摆脱可怕的背景颜色,并重塑阴影以适应我的表视图单元格中的一个子视图。
UIDragPreviewParameters
-(UIDragPreviewParameters *)tableView:(UITableView *)tableView dragPreviewParametersForRowAtIndexPath:(nonnull NSIndexPath *)indexPath { return [self createParametersForTableView:tableView atIndexPath:indexPath]; } -(UIDragPreviewParameters *)tableView:(UITableView *)tableView dropPreviewParametersForRowAtIndexPath:(NSIndexPath *)indexPath { return [self createParametersForTableView:tableView atIndexPath:indexPath]; } -(UIDragPreviewParameters *)createParametersForTableView:(UITableView *)tableView atIndexPath:(NSIndexPath *)indexPath { // Get the selected table view cell. CustomCell *cell = [tableView cellForRowAtIndexPath:indexPath]; // Create the dragged cell preview parameters. UIDragPreviewParameters *parameters = [[UIDragPreviewParameters alloc] init]; [parameters setBackgroundColor:[UIColor clearColor]]; [parameters setVisiblePath:[UIBezierPath bezierPathWithRoundedRect:cell.customSubView.frame cornerRadius:22.2]]; [parameters setShadowPath:[UIBezierPath bezierPathWithRoundedRect:cell.customSubView.frame cornerRadius:22.2]]; return parameters; }
如果使用此方法,则需要实现两个委托:UITableViewDragDelegate和UITableViewDropDelegate。
UITableViewDragDelegate
UITableViewDropDelegate
[yourTableView setDragDelegate:self]; [yourTableView setDropDelegate:self];
拖动委托方法将允许您在拖动单元格时控制预览背景。在拖放单元格时,您需要使用拖放委托方法来避免预览背景返回到默认的白色背景。
9条答案
按热度按时间lstz6jyr1#
所以,我有答案,只是UITableView的子类与方法:
qlvxas9a2#
无阴影表格视图.m
fcy6dtqo3#
快速破解是子类UITableViewCell和添加方法:
wh6knrhe4#
这个代码对我有效!
yrdbyhpb5#
我在使用默认的UITableView重排序控件时遇到了类似的问题,所以我使用了这个外部的第三方库来解决我的问题。
https://github.com/shusta/ReorderingTableViewController
希望这能帮上忙
snvhrwxg6#
Swift 3实施(删除了iOS6支持)
gab6jxml7#
对我来说,对UISadowView的破解并不奏效。我在iOS 10上检查了解决方案。但cell类中的一行代码成功了:
n3h0vuf28#
Swift 4解决方案;使用扩展的uitableviewcontroller,因为现在阴影在表格中,并且仅在移动单元格时添加。
r8xiu3jd9#
所有其他的答案似乎都是使用私有API,这显然不是一件好事。此外,他们似乎不再工作(至少在iOS 16上)。
我发现使用
UIDragPreviewParameters
可以让我摆脱可怕的背景颜色,并重塑阴影以适应我的表视图单元格中的一个子视图。如果使用此方法,则需要实现两个委托:
UITableViewDragDelegate
和UITableViewDropDelegate
。拖动委托方法将允许您在拖动单元格时控制预览背景。在拖放单元格时,您需要使用拖放委托方法来避免预览背景返回到默认的白色背景。