如何在单元格拖动时隐藏UITableViewCell中的阴影

时间:2013-01-30 15:03:58

标签: ios xcode uitableview

我有隐藏分隔线的UITableView,当我拖动单元格时,阴影会出现某种情况,因为上下边框会出现。怎么隐藏这个?请看例子: Emulator screenshot

非常感谢!

8 个答案:

答案 0 :(得分:4)

所以,我已经用方法回答了UITableView的子类:

- (void) didAddSubview:(UIView *)subview
{
    [super didAddSubview:subview];

    if([subview.class.description isEqualToString:@"UIShadowView"]) {
        subview.hidden = YES;
    }
}

答案 1 :(得分:4)

NoShadowTableView.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

答案 2 :(得分:2)

此代码适合我!

import UIKit

class NoShadowTableView: UITableView {

    override func didAddSubview(_ subview: UIView) {
        super.didAddSubview(subview)
        if "\(type(of: subview))" == "UIShadowView" {
            subview.removeFromSuperview()
        }
    }

}

答案 3 :(得分:1)

我使用默认的UITableView重新排序控件遇到了类似的问题。所以我用这个外部第三方库解决了我的问题。

https://github.com/shusta/ReorderingTableViewController

希望这有帮助

答案 4 :(得分:1)

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
            }
        })
    }
}

答案 5 :(得分:1)

Quick hack继承了UITableViewCell并添加了方法:

 override func layoutSubviews() {
        super.layoutSubviews()

        superview?.subviews.filter({ "\(type(of: $0))" == "UIShadowView" }).forEach { (sv: UIView) in
            sv.removeFromSuperview()
        }
    }

答案 6 :(得分:0)

对于我来说,使用UIShadowView并不起作用。我在iOS 10上检查了解决方案。但是单元类中的一行已经完成了这个技巧:

override func layoutSubviews() {
    super.layoutSubviews()
    self.subviews.filter{ $0 is UIImageView }.forEach { $0.isHidden = true }
}

答案 7 :(得分:0)

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
        }
    }

}