2009-10-08 44 views
5

Sự cố: Dấu phân tách giữa các ô trong chế độ xem bảng chỉ xuất hiện cho các ô được hiển thị khi lượt xem tải và chỉ khi tải. Khi xem bảng được cuộn xuống, các ô được cuộn vào chế độ xem sẽ không hiển thị dấu phân cách giữa chúng, sau đó khi chế độ xem bảng được cuộn lại, các ô ban đầu sẽ không hiển thị dấu phân cách.Dòng phân cách UITableView biến mất giữa các ô khi cuộn

Chi tiết: Tôi có UITableView mà tôi đang thêm UITableViewCells chuẩn. Các ô này được tạo bằng initWithFrame, chiều cao khung = 90px. Tôi đang thêm chế độ xem tùy chỉnh được tạo từ một ngòi bút vào chế độ xem của ô này, chiều cao = 90px. Chiều cao ô được chỉ định tại 90px trong tableView: heightForRowAtIndexPath :.

Có ai có kinh nghiệm về hành vi này không?

Trả lời

6

Tôi có cảm giác giải pháp cho việc này sẽ đơn giản ... Tôi đã tạo chiều cao cho các ô của mình là 91px và các đường phân cách xuất hiện khi chúng di chuyển.

3

Tôi không thể sử dụng giải pháp của Douglas vì các bảng của tôi có một số lượng lớn các ô và sẽ trở nên khá không sử dụng được trên điện thoại cũ. Tái sử dụng các tế bào là chìa khóa cho hiệu suất.

NHƯNG, tôi quản lý để workaround vấn đề sử dụng thiết bị tách bạch và thêm của riêng tôi trong contentView của tế bào, như sau:

yourTable.separatorColor = [UIColor clearColor]; 
separatorView.frame = FactRectMake(0, rowHeight-1, appFrame.size.width, 0.2); 
3

tôi đã cùng một vấn đề, nhưng tôi đã sử dụng một giải pháp khác nhau. Máy phân tách của tôi đã biến mất vì tôi đang xóa ô của mình bằng cách sử dụng:

for (UIView *eachView in self.subviews) { 
    [eachView removeFromSuperview]; 
} 

Điều này cũng loại bỏ chế độ xem phân cách!

Thay vào đó, tôi được giao một thẻ cho mỗi quan điểm hải quan của tôi (ba nhãn) ngay trước khi thêm chúng vào xem phụ:

tempFirstNameLabel.tag = 100; 
self.firstNameLabel = tempFirstNameLabel; 
[self addSubview:self.firstNameLabel]; 

Sau đó, khi tôi xóa các tế bào, tôi chỉ loại bỏ những quan điểm:

for (int i = 100; i<103; i++) { 
    UIView *eachView = [self viewWithTag:i]; 
    [eachView removeFromSuperview]; 
} 

Hy vọng điều này sẽ hữu ích! Điều này cũng tránh được các vấn đề quản lý bộ nhớ mà giải pháp của @Douglas Smith đặt ra.

1

Bạn nên đặt dấu phân tách và sau đó một dòng lại

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    // it is a bug in iOS 7 
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
    tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 
Các vấn đề liên quan