Rah*_*hul 7 objective-c uitableview ios swift
UITableViewWrapperView iOS11中没有,当我使用Xcode9构建我的应用程序时.
我UITableView通过使用insertSubview方法为我设置背景视图,UIView当我使用Xcode8编译我的代码时,所有iOS版本的代码工作正常但是当我使用Xcode9构建相同的代码时,内容是不可见的(在iOS 11上),因为背景层已经过来细胞.
以下是调试结果 -
Xcode9和iOS 11 -
A.添加背景之前
Run Code Online (Sandbox Code Playgroud)? 2 elements - 1 : <UIImageView: 0x7fe7f5f045c0; frame = (3 710.667; 408 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x604000223f80>> - 2 : <UIImageView: 0x7fe7f5f01e30; frame = (408.667 3; 2.33333 385); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled> = NO; layer = <CALayer: 0x604000226720>>
B.添加背景后
Run Code Online (Sandbox Code Playgroud)? 3 elements - 0 : <UIView: 0x7fe7f5e09840; frame = (0 0; 414 736); layer = <CALayer: 0x60400003d780>> - 1 : <UIImageView: 0x7fe7f5f045c0; frame = (3 710.667; 408 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x604000223f80>> - 2 : <UIImageView: 0x7fe7f5f01e30; frame = (408.667 3; 2.33333 385); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled> = NO; layer = <CALayer: 0x604000226720>>
Xcode8和iOS 11 - UITableViewWrapperView存在 -
A.添加背景之前
Run Code Online (Sandbox Code Playgroud)3 elements - 0 : <UITableViewWrapperView: 0x7ffdbe81cc00; frame = (0 0; 375 647); gestureRecognizers = <NSArray: 0x608000244a10>; layer => <CALayer: 0x608000028cc0>;contentOffset: {0, 0}; contentSize: {375,> 647}> - 1 : <UIImageView: 0x7ffdbe406af0; frame = (3 641.5; 369 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO;layer = <CALayer: 0x608000028fe0>> - 2 : <UIImageView: 0x7ffdbe407320; frame = (369.5 637; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO;> layer = <CALayer: 0x608000029140>>
B.添加背景后
Run Code Online (Sandbox Code Playgroud)4 elements - 0 : <UIView: 0x7ffdbe505cc0; frame = (0 0; 375 667); layer = <CALayer: 0x60000002a460>> - 1 : <UITableViewWrapperView: 0x7ffdbe81cc00; frame = (0 0; 375 647); gestureRecognizers = <NSArray: 0x608000244a10>; layer =<CALayer: 0x608000028cc0>; contentOffset: {0, 0};contentSize: {375,647}> - 2 : <UIImageView: 0x7ffdbe40b0f0; frame = (3 641.5; 369 2.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO;layer = <CALayer: 0x608000029e00>> - 3 : <UIImageView: 0x7ffdbe40b550; frame = (369.5 637; 2.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO;layer = <CALayer: 0x608000029f00>>
设置背景的方法 -
private func setTableViewBackground() {
let backgroundView = UIView()
backgroundView.frame = view.frame
let maskPath: UIBezierPath = UIBezierPath(roundedRect: backgroundView.bounds, byRoundingCorners: ([.topLeft, .topRight]), cornerRadii: CGSize(width:20, height:20))
let maskLayer: CAShapeLayer = CAShapeLayer()
maskLayer.frame = backgroundView.bounds
maskLayer.path = maskPath.cgPath
backgroundView.layer.mask = maskLayer
backgroundView.backgroundColor = UIColor.red
myCustomTableView.insertSubview(backgroundView, at: 0)
}
Run Code Online (Sandbox Code Playgroud)
在iOS11上使用Xcode8构建
在iOS11上使用Xcode9构建
我找到了这个链接,它确认UITableViewWrapperView从iOS11中删除了,但是当我们使用Xcode9编译代码时?
这就是为什么我不喜欢使用未记录的功能。苹果公司的员工可以在没有通知的情况下随意更改它们。我对您的案例的建议是将表格视图放在 IB 中的红色基板上并应用您的代码。
注意。不要忘记将clipsToBounds属性设置为true.
该函数会更短:
private func setTableViewBackground() {
let backgroundView = self.tableViewSubstrate!
let maskPath: UIBezierPath = UIBezierPath(roundedRect: backgroundView.bounds, byRoundingCorners: ([.topLeft, .topRight]), cornerRadii: CGSize(width:20, height:20))
let maskLayer: CAShapeLayer = CAShapeLayer()
maskLayer.path = maskPath.cgPath
backgroundView.layer.mask = maskLayer
}
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到示例项目:https ://github.com/AlexeyGolovenkov/TableWithRoundCorners