Khi tôi thiết lập chế độ xem bảng với 4 hàng, vẫn còn các dòng phân cách bổ sung (hoặc các ô trống thừa) bên dưới các hàng được điền.
Làm thế nào tôi có thể loại bỏ các tế bào?
Khi tôi thiết lập chế độ xem bảng với 4 hàng, vẫn còn các dòng phân cách bổ sung (hoặc các ô trống thừa) bên dưới các hàng được điền.
Làm thế nào tôi có thể loại bỏ các tế bào?
Câu trả lời:
Chỉ cần kéo một UIView vào bàn. Trong bảng phân cảnh, nó sẽ ngồi ở trên cùng bên dưới các ô tùy chỉnh của bạn. Bạn có thể thích đặt tên nó là "chân trang".
Ở đây nó được hiển thị bằng màu xanh lá cây cho rõ ràng, bạn có thể muốn màu sắc rõ ràng.
Lưu ý rằng bằng cách điều chỉnh chiều cao, bạn có thể ảnh hưởng đến cách xử lý "độ nảy dưới cùng" của bảng, tùy thích. (Chiều cao bằng 0 thường ổn).
Để làm điều đó theo chương trình:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
hoặc nếu bạn thích,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Thêm vào bộ điều khiển xem bảng ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
và nếu cần ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
tableFooterView
để lại một dấu phân cách trên ô cuối cùng trong hàng, vì bảng vẫn dự đoán nội dung bên dưới ô đó. Sử dụng cách lịch sử sẽ loại bỏ phân cách cuối cùng đó và nhìn tổng thể tốt hơn.
Đây là một cách khác để thực hiện điều đó theo kiểu bảng được nhóm và có thể bạn không đoán được. Thêm một tiêu đề và chân trang vào bảng (có thể là một hoặc các điều kiện khác, chưa được kiểm tra) làm cho các dấu phân cách biến mất khỏi các hàng điền / hàng trống.
Tôi tình cờ phát hiện ra điều này vì tôi muốn có một khoảng trống nhỏ ở đầu và cuối bàn để giảm nguy cơ nhấn nút thay vì một ô bảng bằng ngón tay có thịt. Đây là một phương pháp để gắn một chế độ xem trống dưới dạng đầu trang và chân trang. Sử dụng bất kỳ chiều cao nào bạn thích, bạn vẫn loại bỏ các đường phân cách phụ.
- (void) addHeaderAndFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.myTableView setTableHeaderView:v];
[self.myTableView setTableFooterView:v];
[v release];
}
Để trả lời @Casebash, tôi đã quay lại mã trong ứng dụng của mình (Trình quản lý danh sách "AcmeLists" trong cửa hàng iTunes ...) và sử dụng ngắn gọn phương thức addHeaderAndFooter để xác minh. Không có nó , tôi có các dải phân cách thêm; với mã, tôi có những gì bạn nhìn thấy trong cửa sổ này: không có hình ảnh phân tách hàng của bảng . Vì vậy, tôi không chắc tại sao nó sẽ không làm việc cho bạn. Hơn nữa, nó có ý nghĩa với tôi rằng có bất kỳ chân trang tùy chỉnh nào trên chế độ xem bảng sẽ nhất thiết phải dừng vẽ các dấu phân cách hàng cho các hàng trống bên dưới nó. Điều đó thật gớm ghiếc. Để tham khảo, tôi đã xem các bảng có nhiều hàng hơn có thể được xem trên màn hình và sau đó cho một bảng có hai hàng. Trong cả hai trường hợp, không có dải phân cách bên ngoài.
Có lẽ quan điểm tùy chỉnh của bạn không thực sự được thêm vào. Để kiểm tra điều đó, hãy đặt màu nền thành một cái gì đó khác clearColor
, ví dụ , [UIColor redColor]
. Nếu bạn không thấy một số thanh màu đỏ ở cuối bảng, chân trang của bạn sẽ không được đặt.
Xóa các dòng phân cách bổ sung cho các hàng trống trong UITableView trong Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Tôi muốn mở rộng câu trả lời wkw :
Đơn giản chỉ cần thêm chân trang với chiều cao 0 sẽ thực hiện thủ thuật. (đã thử nghiệm trên sdk 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
hoặc thậm chí đơn giản hơn - nơi bạn thiết lập chế độ xem bảng của mình, hãy thêm dòng này:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
hoặc thậm chí đơn giản hơn - chỉ cần loại bỏ bất kỳ dấu phân cách nào:
[_tableView setTableFooterView:[UIView new]];
Cảm ơn wkw một lần nữa :)
Đơn giản chỉ cần kéo một UIView
vào UITableView
chân trang của bạn . Đặt chiều cao của chân trang thành 0.
Nếu bạn đang sử dụng Swift, hãy thêm đoạn mã sau vào viewDidLoad của bộ điều khiển quản lý chế độ xem bảng:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Bạn chỉ có thể thêm một chân trang trống ở cuối, sau đó nó sẽ ẩn các ô trống nhưng nó cũng sẽ trông khá xấu xí:
tableView.tableFooterView = UIView()
Có một cách tiếp cận tốt hơn: thêm một dòng 1 điểm ở cuối chế độ xem bảng làm chân trang và các ô trống cũng sẽ không được hiển thị nữa.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
chỉ cần thêm mã này ( Swift ). .
tableView.tableFooterView = UIView()
Thúc đẩy giải pháp của J. Costa: Bạn có thể thực hiện thay đổi toàn cầu cho bảng bằng cách đặt dòng mã này:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
bên trong phương thức có thể đầu tiên (thường là trong AppDelegate
, trong: application:didFinishLaunchingWithOptions:
phương thức).
Tôi biết Câu hỏi này đã được chấp nhận câu trả lời nhưng tôi đặt ở đây những cách khác nhau để làm thế nào để ẩn dòng phân cách Extra của UITableView
.
Bạn có thể ẩn tableView
dòng phân cách tiêu chuẩn và thêm dòng tùy chỉnh của mình ở đầu mỗi ô.
Cập nhật:
Cách dễ nhất để thêm dấu phân cách tùy chỉnh là thêm đơn giản UIView
chiều cao 1px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
HOẶC LÀ
self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
self.tblView.delegate=self;
self.tblView.dataSource=self;
[self.view addSubview:self.tblView];
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.tblView setTableHeaderView:v];
[self.tblView setTableFooterView:v];
[v release];
HOẶC LÀ
- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
// To "clear" the footer view
return [[UIView new] autorelease];
}
HOẶC Cách tốt nhất và đơn giản nhất mà tôi thích là
self.tableView.tableFooterView = [[UIView alloc] init];
Hãy thử bất kỳ một trong những;
Bạn có thể tìm thấy rất nhiều câu trả lời cho câu hỏi này. Hầu hết trong số họ xung quanh thao tác với UITableView
's tableFooterView
thuộc tính và đây là cách thích hợp để ẩn các hàng trống. Để đảm bảo, tôi đã tạo tiện ích mở rộng đơn giản cho phép bật / tắt các hàng trống từ Trình tạo giao diện. Bạn có thể kiểm tra xem nó ra từ này ý chính tập tin. Tôi hy vọng nó có thể tiết kiệm một chút thời gian của bạn.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Sử dụng:
tableView.isEmptyRowsHidden = true
Nếu bạn không muốn có bất kỳ dấu phân cách nào sau ô cuối cùng, thì bạn cần chiều cao gần bằng 0 nhưng khác không cho chân trang của bạn.
Trong của bạn UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift hoạt động tuyệt vời với:
tableView.tableFooterView = UIView()
Chỉ cần thêm chế độ xem với màu phân cách mong muốn làm màu nền, chiều rộng 100%, chiều cao 1px ở vị trí x0 y-1 vào bảngViewCell của bạn. Hãy chắc chắn rằng bảngViewCell không clip xem xét, thay vào đó bảngView nên.
Vì vậy, bạn nhận được một dấu tách đơn giản và hoạt động tuyệt đối chỉ giữa các ô hiện có mà không có bất kỳ hack cho mỗi mã hoặc IB.
Lưu ý: Trên đỉnh nảy dọc, dải phân cách thứ 1 xuất hiện, nhưng đó không phải là vấn đề vì đó là hành vi mặc định của iOS.
Để loại bỏ các dòng phân cách bổ sung từ dưới cùng của UItableview theo chương trình, chỉ cần viết ra hai dòng mã sau và nó sẽ xóa phân tách bổ sung khỏi nó.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Thủ thuật này làm việc cho tôi mọi lúc, hãy thử bản thân mình.
Tôi đã có một số may mắn khi thực hiện một phần của câu trả lời được chấp nhận (iOS 9+, Swift 2.2). Tôi đã thử thực hiện:
self.tableView.tableFooterView = UIView(frame: .zero)
Tuy nhiên, không có ảnh hưởng gì đến tôi tableView
- tôi tin rằng nó có thể có liên quan đến thực tế là tôi đang sử dụng UITableViewController
.
Thay vào đó, tôi chỉ phải ghi đè viewForFooterInSection
phương thức (tôi không đặt phương thức tableFooterView
khác):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Điều này hoạt động tốt cho một tableView
với một phần duy nhất (nếu bạn có nhiều phần, bạn cần chỉ định phần cuối cùng).
Nếu bạn chỉ có một phần, thì cách nhanh nhất và dễ nhất là chỉ cần đặt Kiểu xem bảng từ "Đồng bằng" thành "Được nhóm". (xem hình)
Nếu bạn có nhiều phần hơn, bạn có thể cần đặt chiều cao tiêu đề thành 0 (tùy thuộc vào sở thích của bạn / khách hàng / người quản lý dự án của bạn)
Nếu bạn có nhiều phần hơn và không muốn gây rối với các tiêu đề (ngay cả khi đó chỉ là một dòng trong trường hợp đơn giản nhất), thì bạn cần đặt UIView làm chân trang, như đã được giải thích trong các câu trả lời trước)
Swift 4 cách nhanh chóng và dễ dàng.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Nếu bạn đang có các ô tĩnh. Bạn cũng có thể tắt dải phân cách từ cửa sổ Thanh tra. (điều này sẽ không được mong muốn nếu bạn cần thiết bị phân tách. Trong trường hợp đó, sử dụng phương pháp hiển thị ở trên)
super.viewDidLoad()
) và được bao gồm trong câu trả lời wiki ở trên cùng. Đối với việc xóa tất cả các dấu phân cách, đó thực sự không phải là câu hỏi này, vì vậy tốt hơn là hoàn nguyên bản chỉnh sửa cuối cùng của bạn và / hoặc xóa hoàn toàn câu trả lời của bạn.
Nếu bạn muốn xóa không gian không mong muốn trong UITableview, bạn có thể sử dụng hai phương pháp bên dưới
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Tôi đã thêm phần mở rộng xem bàn nhỏ này giúp xuyên suốt
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Hãy thử với điều này
cho mục tiêu C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
cho Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
Trong trường hợp bạn có một searchbar
trong của bạn view
(để hạn chế số lượng kết quả chẳng hạn), bạn còn phải thêm những điều sau đây trong shouldReloadTableForSearchString
vàshouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
Trong Swift (Tôi đang sử dụng 4.0), bạn có thể thực hiện điều này bằng cách tạo ra một tùy chỉnh UITableViewCell
lớp, và overriding
các setSelected
phương pháp. Sau đó separator insets
tất cả về 0 . (lớp chính của tôi với chế độ xem bảng có màu nền rõ ràng).
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}