2010-11-29 29 views
26

Tôi có một bảng có kiểu Đồng bằng và chỉ một phần. Tôi đã triển khai viewForHeaderInSection: để thêm chế độ xem tùy chỉnh vào tiêu đề phần.Tách giữa Tiêu đề và ô đầu tiên - Trong đồng bằng UITableView

Tôi không thể thấy đường tách giữa chế độ xem tiêu đề của phần bảng và ô đầu tiên của tôi. [Xem hình ảnh đính kèm]

alt text

Tôi đang làm gì sai?

Trả lời

29

Đầu trang và chân trang tùy chỉnh không chứa dấu tách bên dưới/bên trên chúng. Bạn sẽ cần phải tự mình thực hiện trình tách trong chế độ xem tùy chỉnh (hoặc chuyển sang kiểu được nhóm, sẽ hiển thị đường viền của nhóm ở trên và bên dưới nó ngay cả với đầu trang/chân trang tùy chỉnh).

+0

Chuyển sang kiểu nhóm được thực hiện thủ thuật. –

+0

Làm cách nào để chuyển sang kiểu được nhóm? – Imran

+0

Tôi có thể xóa/giảm chiều cao phân cách không? – Nil

40

Khi Jeremy ghi chú trong câu trả lời của mình, iOS không thêm dấu phân cách trên/dưới đầu trang/chân trang; bạn chỉ có thể sử dụng UIView để tự tạo một dòng.

Dưới đây là đoạn code để thêm một tìm xem separator tiêu chuẩn để một cái nhìn tiêu đề:

CGRect sepFrame = CGRectMake(0, headerView.frame.size.height-1, 320, 1); 
seperatorView = [[[UIView alloc] initWithFrame:sepFrame] autorelease]; 
seperatorView.backgroundColor = [UIColor colorWithWhite:224.0/255.0 alpha:1.0]; 
[headerView addSubview:seperatorView]; 

Nếu bạn đang cố gắng để làm cho nó trông giống như một tế bào xem bảng bình thường, có lẽ bạn cần phải thêm một ở đầu của chế độ xem tiêu đề.

+1

Xin cảm ơn, đoạn mã hữu ích. Đối với bất kỳ ai quan tâm, tôi đã đặt bên trong lớp View của tôi cho tiêu đề tùy chỉnh của tôi trong phương thức awakeFromNib(). – Tim

+0

@ Jeff tôi đã làm tương tự. –

9

nếu bạn muốn mang đến cho không gian duy nhất giữa tiêu đề bảng và bảng hàng đầu tiên sau đó bạn có thể sử dụng

Trong phương pháp của tableView:heightForHeaderInSection:(NSInteger)section

if(section ==0) 
    return 3; // (space u want to give between header and first row); 

return 10; //(ur section header height) 

Trong phương pháp của tableView:viewForHeaderInSection:(NSInteger)section

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)]; 
    headerView.backgroundColor = [UIColor clearColor]; // use your own design 

    return headerView; 
5

Thêm một hàng "ẩn" bổ sung vào phần bạn muốn thêm dấu phân tách bằng cách trả lại +1 số hàng hiện tại trong tableView:numberOfRowsInSection:. Sau đó, thêm phương pháp sau đây:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section == sectionOfHiddenRow && indexPath.row == indexOfHiddenRow) 
     return 0.f; 
    else 
     return [super tableView:tableView heightForRowAtIndexPath:indexPath]; 
} 

Nếu bạn muốn tách ở phía trên cùng của một phần (sau khi một tiêu đề), indexOfHiddenRow sẽ 0. Nếu bạn muốn nó ở dưới cùng của một phần (trước một chân trang) nó sẽ là [self tableView:tableView numberOfRowsInSection:sectionOfHiddenRow] - 1.

Bây giờ bên trong tableView:cellForRowAtIndexPath:, chỉ cần trả lại [UITableViewCell new] cho hàng ẩn (nó sẽ không được hiển thị, vì vậy không cần đặt khung hoặc bất kỳ thứ gì). Bạn có thể cần phải thực hiện một số điều chỉnh chỉ số -1 chỉ mục trong các phương pháp UITableViewDataSourceUITableViewDelegate của mình, nhưng nó hoạt động (được thử nghiệm trong iOS 7), đảm bảo kiểu dáng nhất quán (không cần phải tự tách riêng "giả mạo"). được rút ra UITableView tách).

+1

Đây thực sự là cách chính xác. Chỉ cần thử nghiệm và nó hoạt động. –

+1

OK, phần đó với kiểu dáng phù hợp đã thuyết phục tôi. +1 –

+0

có vẻ như một ý tưởng hack nhưng tuyệt vời! –

1

Thêm dấu phân tách giữa chế độ xem tiêu đề và hàng đầu tiên: - Trong chế độ xem cho Tiêu đề trong phương thức ủy nhiệm phần, hãy thêm một trình tự xem tự động // @ property (nonatomic, strong) UIImageView * separator;

- (CGFloat)tableView:(UITableView *)tableView 
heightForHeaderInSection:(NSInteger)section { 

return 41; 
} 


- (UIView *)tableView:(UITableView *)tableView 
viewForHeaderInSection:(NSInteger)section { 

self.headerView = [[UIView alloc] init]; 
self.headerView.backgroundColor = [UIUtils colorForRGBColor:TIMESHEET_HEADERVIEW_COLOR]; 

self.separator = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"seperator.png"]]; 
self.separator.frame = CGRectMake(0,40,self.view.frame.size.width,1); 
[self.headerView addSubview:self.separator]; 
return self.headerView; 

} 
1

Tôi đã mở rộng UITableViewCell bằng một vài phương pháp phân tách (trong Swift). Với họ, tôi có thể thêm dấu phân cách vào tiêu đề hoặc xóa chúng khỏi các ô thông thường. Tôi hy vọng nó có thể giúp một số người.

public extension UITableViewCell 
{ 
    func addSeparator(y: CGFloat, margin: CGFloat, color: UIColor) 
    { 
     let sepFrame = CGRectMake(margin, y, self.frame.width - margin, 0.7); 
     let seperatorView = UIView(frame: sepFrame); 
     seperatorView.backgroundColor = color; 
     self.addSubview(seperatorView); 
    } 

    public func addTopSeparator(tableView: UITableView) 
    { 
     let margin = tableView.separatorInset.left; 

     self.addSeparator(0, margin: margin, color: tableView.separatorColor!); 
    } 

    public func addBottomSeparator(tableView: UITableView, cellHeight: CGFloat) 
    { 
     let margin = tableView.separatorInset.left; 

     self.addSeparator(cellHeight-2, margin: margin, color: tableView.separatorColor!); 
    } 

    public func removeSeparator(width: CGFloat) 
    { 
     self.separatorInset = UIEdgeInsetsMake(0.0, width, 0.0, 0.0); 
    } 

} 
Các vấn đề liên quan