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

    原文作者:mo_xiao_mo
    原文地址: https://blog.csdn.net/mo_xiao_mo/article/details/71106558
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞