2016-01-23 64 views
1
class RoomNewTableViewCell: UITableViewCell { 

    var row:Int? 
    var room: Room?{ 
     didSet{ 
      updateUI() //this is when render is called 
     } 
    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     self.layoutMargins = UIEdgeInsetsZero 
     self.separatorInset = UIEdgeInsetsMake(0, -15, 0, 0) 
    } 



    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 

    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func updateUI(){ 
     println("Updating UI") 
     let test = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 30)) 
     test.backgroundColor = UIColor.greenColor() 
     self.backgroundColor = UIColor.blueColor() 
     self.addSubview(test) 
    } 

} 

}如何使UITableView分隔符插入從屏幕的邊緣開始?

這是我如何創建我的tableView:

//Draw Table 
    self.roomsTableView.delegate = self 
    self.roomsTableView.dataSource = self 
    self.roomsTableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine 
    self.roomsTableView.separatorColor = UIColor(hex: 0xededed) 
    let tableViewStartY = CGFloat(0) //used to be 20.0 
    let extraPaddingToAlignTable = CGFloat(50) 
    self.roomsTableView.frame = CGRectMake(0, tableViewStartY, screenWidth, CGRectGetMinY(self.tabBarController!.tabBar.frame) + extraPaddingToAlignTable) 
    self.roomsTableView.addSubview(self.refreshControl) 
    self.roomsTableView.tableFooterView = UIView(frame: CGRectZero) 


    self.roomsTableView.rowHeight = CGFloat(100) 
    self.roomsTableView.clipsToBounds = true 
    self.roomsTableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0) 
    self.roomsTableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) 
    self.roomsTableView.registerClass(RoomNewTableViewCell.self, forCellReuseIdentifier: "newCell") 
    self.view.addSubview(self.roomsTableView) 

我已經試過玩弄separatorInset爲表和單元格,但似乎無法使它工作。

enter image description here

+0

的可能的複製[iOS 8的分離器的UITableView插圖0不工作(http://stackoverflow.com/questions/25770119/ios-8-uitableview-separator-inset-0-not-working) –

回答

4

由於推出的iOS 8.0中,蘋果加入layoutMargins屬性的UITableViewCell和UITableView的。

因此,您可以在TableView的willDisplayCell:委託方法中將layoutMargin設置爲零。該代碼只是將tableview layoutMargin和cell layoutMargin設置爲UIEdgeInsetsZero

這也適用於iOS 7.0。

試試這可能對你有幫助。

斯威夫特

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 

     if(tableView.respondsToSelector("setSeparatorInset:")){ 

      tableView.separatorInset = UIEdgeInsetsZero 
     } 

     if(tableView.respondsToSelector("setLayoutMargins:")){ 

      tableView.layoutMargins = UIEdgeInsetsZero 
     } 

     if(cell.respondsToSelector("setLayoutMargins:")){ 

      cell.layoutMargins = UIEdgeInsetsZero 
     } 

    } 

目標C

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { 
     [tableView setSeparatorInset:UIEdgeInsetsZero]; 
    } 

    if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) { 
     [tableView setLayoutMargins:UIEdgeInsetsZero]; 
    } 

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { 
     [cell setLayoutMargins:UIEdgeInsetsZero]; 
    } 
} 

對於iOS 9.0,你必須設置cellLayoutMarginsFollowReadableWidthNO

目標C

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    //For iOS 9 and Above 

    if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 9.0) { 
     self.tableView.cellLayoutMarginsFollowReadableWidth = NO; 
    } 
} 

斯威夫特

override func viewDidLoad() { 
     super.viewDidLoad() 

     //For iOS 9 and Above 
     if #available(iOS 9, *) { 
      tableView.cellLayoutMarginsFollowReadableWidth = false 
     } 
    } 

您還可以設置從故事板這個值。

打開故事板並轉到TableView Cell的Attribute Inspector。

Separator字段更改爲Custom Insets並將Left更改爲0

請在下面找到圖片。

enter image description here