6

我有带有隐藏分隔线的 UITableView,当我拖动单元格时,阴影会出现某种形式,因为边框会上下出现。如何隐藏这个?请看例子: 模拟器截图

十分感谢!

4

8 回答 8

4

所以,我有答案,只是 UITableView 的子类和方法:

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

    if([subview.class.description isEqualToString:@"UIShadowView"]) {
        subview.hidden = YES;
    }
}
于 2013-01-30T18:45:34.540 回答
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
于 2013-12-11T08:53:30.510 回答
3

快速破解是子类化 UITableViewCell 并添加方法:

 override func layoutSubviews() {
        super.layoutSubviews()

        superview?.subviews.filter({ "\(type(of: $0))" == "UIShadowView" }).forEach { (sv: UIView) in
            sv.removeFromSuperview()
        }
    }
于 2020-03-12T11:35:52.903 回答
2

这段代码对我有用!

import UIKit

class NoShadowTableView: UITableView {

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

}
于 2017-12-22T02:26:21.607 回答
1

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

https://github.com/shusta/ReorderingTableViewController

希望这可以帮助

于 2013-01-30T15:46:10.837 回答
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
            }
        })
    }
}
于 2017-01-03T16:08:44.763 回答
0

对我来说,使用 UIShadowView 的黑客没有奏效。我在 iOS 10 上检查了解决方案。但是单元类中的一行已经成功了:

override func layoutSubviews() {
    super.layoutSubviews()
    self.subviews.filter{ $0 is UIImageView }.forEach { $0.isHidden = true }
}
于 2017-07-25T13:35:26.313 回答
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
        }
    }

}
于 2019-10-09T10:22:37.490 回答