Swift - 去除tableView在编辑模式下的自动缩进(单元格头部不留空白)

1,问题描述

我们知道当表格  tableview  进入到编辑状态时,单元格内容会自动向右缩进,这样留出的空间可以用来显示新增或删除按钮图标。 
       原文:Swift - 去除tableView在编辑模式下的自动缩进(单元格头部不留空白)         原文:Swift - 去除tableView在编辑模式下的自动缩进(单元格头部不留空白)

如果我们只需要单元格拖动排序功能,而不要前面的图标,可以在  editingStyleForRowAt 委托方法中返回  none 即可。不过单元格的缩进仍然存在,左侧还是会有多余的空白区域。
原文:Swift - 去除tableView在编辑模式下的自动缩进(单元格头部不留空白)

2,解决办法

我们只要在委托方法  shouldIndentWhileEditingRowAt 中返回  false 即可,表示关闭缩进。
原文:Swift - 去除tableView在编辑模式下的自动缩进(单元格头部不留空白)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import  UIKit
 
class  ViewController UIViewController , UITableViewDelegate ,
UITableViewDataSource , UIGestureRecognizerDelegate  {
     
     var  tableView: UITableView ?
     
     var  ctrlnames:[ String ] = [ "UILabel 标签" , "UIButton 按钮" , "UIDatePiker 日期选择器" ,
                               "UITableView 表格视图" ]
     
     override  func  viewDidLoad() {
         super .viewDidLoad()
         
         //创建表视图
         self .tableView =  UITableView (frame:  self .view.frame,
                                      style:.plain)
         self .tableView!.delegate =  self
         self .tableView!.dataSource =  self
         //创建一个重用的单元格
         self .tableView!.register( UITableViewCell . self , forCellReuseIdentifier:  "SwiftCell" )
         self .view.addSubview( self .tableView!)
         
         //绑定对长按的响应
         let  longPress =   UILongPressGestureRecognizer (target: self ,
                             action:#selector(tableviewCellLongPressed(gestureRecognizer:)))
         //代理
         longPress.delegate =  self
         longPress.minimumPressDuration = 1.0
         //将长按手势添加到需要实现长按操作的视图里
         self .tableView!.addGestureRecognizer(longPress)
     }
     
     //在本例中,只有一个分区
     func  numberOfSections( in  tableView:  UITableView ) ->  Int  {
         return  1
     }
     
     //返回表格行数(也就是返回控件数)
     func  tableView(_ tableView:  UITableView , numberOfRowsInSection section:  Int ) ->  Int  {
         return  self .ctrlnames.count
     }
     
     //创建各单元显示内容(创建参数indexPath指定的单元)
     func  tableView(_ tableView:  UITableView , cellForRowAt indexPath:  IndexPath )
         ->  UITableViewCell  {
             //为了提供表格显示性能,已创建完成的单元需重复使用
             let  identify: String  "SwiftCell"
             //同一形式的单元格重复使用,在声明时已注册
             let  cell = tableView.dequeueReusableCell(withIdentifier: identify,  for : indexPath)
                 as  UITableViewCell
             cell.accessoryType =  UITableViewCellAccessoryType .disclosureIndicator
             cell.textLabel?.text =  self .ctrlnames[indexPath.row]
             return  cell
     }
     
     //长按表格
     func  tableviewCellLongPressed(gestureRecognizer: UILongPressGestureRecognizer )
     {
         if  (gestureRecognizer.state ==  UIGestureRecognizerState .ended)
         {
             print ( "UIGestureRecognizerStateEnded" )
             //在正常状态和编辑状态之间切换
             if ( self .tableView!.isEditing ==  false ){
                 self .tableView!.setEditing( true , animated: true )
             }
             else {
                 self .tableView!.setEditing( false , animated: true )
             }
         }
     }
     
     //单元格的编辑样式
     func  tableView(_ tableView:  UITableView , editingStyleForRowAt indexPath:  IndexPath )
         ->  UITableViewCellEditingStyle  {
         return  .none
     }
     
     //去除编辑模式下的头部缩进
     func  tableView(_ tableView:  UITableView , shouldIndentWhileEditingRowAt
         indexPath:  IndexPath ) ->  Bool  {
         return  false
     }
     
     //在编辑状态,可以拖动设置cell位置
     func  tableView(_ tableView:  UITableView , canMoveRowAt indexPath:  IndexPath ) ->  Bool  {
         return  true
     }
     
     //移动cell事件
     func  tableView(_ tableView:  UITableView , moveRowAt sourceIndexPath:  IndexPath ,
                    to destinationIndexPath:  IndexPath ) {
         if  sourceIndexPath != destinationIndexPath{
             //获取移动行对应的值
             let  itemValue: String  = ctrlnames[sourceIndexPath.row]
             //删除移动的值
             ctrlnames.remove(at: sourceIndexPath.row)
             //如果移动区域大于现有行数,直接在最后添加移动的值
             if  destinationIndexPath.row > ctrlnames.count{
                 ctrlnames.append(itemValue)
             } else {
                 //没有超过最大行数,则在目标位置添加刚才删除的值
                 ctrlnames.insert(itemValue, at:destinationIndexPath.row)
             }
         }
     }
}

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1665.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值