Như (nhiều) người khác đã chỉ ra, bạn có thể dễ dàng ẩn tất cả các dấu tách UITableViewCell bằng cách tắt chúng cho toàn bộ UITableView; ví dụ: trong UITableViewControll của bạn
- (void)viewDidLoad {
...
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
...
}
Thật không may, đó là một PITA thực sự để làm trên cơ sở từng tế bào , đó là những gì bạn đang thực sự yêu cầu.
Cá nhân, tôi đã thử rất nhiều hoán vị thay đổi cell.separatorInset.left
, một lần nữa, như (nhiều) người khác đã đề xuất, nhưng vấn đề là, để trích dẫn Apple (nhấn mạnh thêm):
" ... Bạn có thể sử dụng thuộc tính này để thêm khoảng trắng giữa nội dung của ô hiện tại và cạnh trái và phải của bảng. Giá trị chèn tích cực di chuyển nội dung ô và dấu tách ô vào trong và ra khỏi các cạnh của bảng ... "
Vì vậy, nếu bạn cố gắng 'ẩn' dấu phân cách bằng cách đẩy nó ra khỏi màn hình bên phải, cuối cùng bạn cũng có thể thụt lề nội dung của ô của bạn. Theo đề xuất của crifan, sau đó bạn có thể cố gắng bù đắp cho tác dụng phụ khó chịu này bằng cách cài đặt cell.indentationWidth
vàcell.indentationLevel
thích hợp để di chuyển mọi thứ trở lại, nhưng tôi thấy điều này cũng không đáng tin cậy (nội dung vẫn bị thụt vào ...).
Cách đáng tin cậy nhất mà tôi đã tìm thấy là lái xe quá mức layoutSubviews
trong một lớp con UITableViewCell đơn giản và đặt phần bên phải để nó chạm vào phần bên trái, làm cho dấu phân cách có độ rộng 0 và vô hình [điều này cần được thực hiện trong layoutSubview để tự động xử lý các vòng quay]. Tôi cũng thêm một phương thức tiện lợi vào lớp con của mình để bật cái này lên.
@interface MyTableViewCellSubclass()
@property BOOL separatorIsHidden;
@end
@implementation MyTableViewCellSubclass
- (void)hideSeparator
{
_separatorIsHidden = YES;
}
- (void)layoutSubviews
{
[super layoutSubviews];
if (_separatorIsHidden) {
UIEdgeInsets inset = self.separatorInset;
inset.right = self.bounds.size.width - inset.left;
self.separatorInset = inset;
}
}
@end
Hãy cẩn thận: không có cách nào đáng tin cậy để khôi phục phần bên phải ban đầu , vì vậy bạn không thể "ẩn" dấu phân cách, do đó tại sao tôi sử dụng một hideSeparator
phương pháp không thể đảo ngược (so với phơi bày dấu phân cách). Vui lòng lưu ý Dấu phân cách vẫn tồn tại trên các ô được sử dụng lại, vì vậy, vì bạn không thể 'ẩn', bạn cần giữ các ô phân cách ẩn này được phân lập trong trình tái sử dụng riêng của chúng.