Giảm khoảng cách giữa các phần của UITableView


141

Có cách nào để giảm khoảng trống giữa hai phần của UITableView không? Có khoảng 15 pixel giữa mỗi phần tôi có. Tôi đã cố gắng để trở về 0 cho -tableView:heightForFooterInSection:-tableView:heightForHeaderInSection:nhưng điều đó không thay đổi bất cứ điều gì.

Bất kỳ đề xuất?


1
Tôi đã sử dụng một bảngView được nhóm và đặt chiều cao của tiêu đề / chân trang thành 0.0. Nhưng nó đang hiển thị một vùng màu xám với chiều cao 30 điểm (mặc định). Sử dụng 0.0là không được chấp nhận. bạn phải sử dụng bất kỳ giá trị nào ở trên, 0.0vd 0.0001.
Mật ong

Như @Honey nói 0.0không hoạt động. Tôi có câu trả lời thấu đáo hơn cho cùng một vấn đề ở đây: stackoverflow.com/a/22185534/2789144
James Nelson

Câu trả lời:


263

Đó là một chút khó khăn, nhưng hãy thử mã này:

- (CGFloat)tableView:(UITableView*)tableView 
           heightForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return 6.0;
    }

    return 1.0;
}

- (CGFloat)tableView:(UITableView*)tableView 
           heightForFooterInSection:(NSInteger)section {
    return 5.0;
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

Thay đổi các giá trị phù hợp. Để xóa khoảng trống, tôi nghĩ 0,0 sẽ không được chấp nhận. Giá trị lành mạnh nhỏ nhất dường như là 1.0.


2
Bạn nên trả lại 5.0f thay vì 5.0, vì xung đột hai lần
LeonS

45
Bạn thậm chí có thể trả về 0,00001f theo chiều cao và bạn sẽ nhận được chiều cao 0 pixel / điểm.
Klaas

1
Như @Klass chỉ ra, bạn không thể sử dụng 0làm chiều cao - bạn sẽ có được chiều cao mặc định.
zekel

26
Tại sao không sử dụng CGFLOAT_MIN? Nó được tạo ra cho các loại kịch bản này :)
Andrei Filip

11
Nếu sử dụng swift, bạn có thể quay lạiCGFloat.leastNonzeroMagnitude
oztune

140

Đối với tất cả những ai muốn thu hẹp khoảng cách về 0, bạn phải sử dụng:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

Bởi vì việc phục vụ của UITableViewDelegate không chỉ tạo ra hiệu ứng bắt đầu từ số float lớn hơn 0.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    return 1.0;
}


-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 1.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(sử dụng iOS 4.1 với XCode 4.0.2)


7
trả lại 0,0001; đang làm việc cho tôi Tôi đang sử dụng xcode 4.6 và iOS 6.1
Sam

Tôi chỉ cần trả về CGFLOAT_MIN trong hai phương thức đầu tiên và nó hoạt động tốt.
Julius

thay vì 0 sử dụngreturn .leastNormalMagnitude
stan

33

Bạn thực sự có thể đặt chiều cao chân trang / tiêu đề / ô trong Trình tạo giao diện trong tab kích thước. Theo mặc định, tiêu đề / chân trang được đặt ở 10.0.


Tôi nghĩ rằng hành vi như vậy đã được thêm vào trong iOS 5.0 hoặc iOS 6.0, nhưng đúng vậy - giờ đây việc thiết lập khoảng cách giữa các nhóm dễ dàng hơn nhiều.
Vlas Voloshin

2
Tôi biết điều này đã cũ nhưng tôi muốn nhận xét rằng kể từ XCode 5 và iOS 7, có vẻ như điều này đã được thực hiện bằng mã. Tôi đặt nó trong trình xây dựng giao diện thành 0 và nó vẫn được đặt thành 1 cho đến khi tôi đặt mã thành 0.
Ahmad

Với Xcode 6 và iOS 8, nó dường như chỉ hoạt động với cấu hình trong bảng phân cảnh.
Murray Sagal

chúng được đặt thành 18 trên xcode 7 theo mặc định. Nhưng đó là giải pháp dễ nhất!
static0886

27

Bạn phải giảm chiều cao phần đầu trang / chân trang. Sau đó, không gian giữa các phần sẽ được giảm.

thử mã này

Nó hoạt động với tôi :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

Bạn cũng có thể giảm chiều cao của phần chân trang và tiêu đề từ bảng phân cảnh. Trong bảng xem -> thanh tra kích thước. Chuyển đến Phần Chiều cao.

Thanh tra kích thước cho UITableView trong bảng phân cảnh.

Theo mặc định, nó được đặt thành 22 cho bảng kiểu Plain và 10 cho bảng kiểu được nhóm. Bạn có thể định cấu hình các giá trị bằng cách tăng / giảm các giá trị cho đầu trang và chân trang riêng biệt.


6

Đối với tôi, vấn đề là do tôi đang sử dụng kiểu xem bảng được nhóm ( UITableViewStyleGrouped). Khi tôi thay đổi nó thành một kiểu đơn giản ( UITableViewStylePlain) tableView:heightForHeaderInSection:phương thức của tôi là điều duy nhất xác định kích thước của mỗi tiêu đề phần.


4

Sử dụng có lẽ, 0 sẽ không hoạt động như mong đợi

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return .leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

CẬP NHẬT CHO iOS7: Do cập nhật tự động ARC, đây là mã @Martin Stolz được chỉnh sửa.

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return 6;
    return 1.0;
}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 5.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(Sử dụng iOS7, Xcode v5.0)


0

Đối với tôi, vấn đề này đã được giải quyết chỉ bằng cách sử dụng đoạn mã sau,

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

Trở lại 1 cho phần đầu tiên đã giải quyết vấn đề.


0

Để thay đổi không gian đầu trang / chân trang, các phương thức sau phải được thực hiện:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(sử dụng các phương pháp tương ứng để thay đổi chiều cao chân trang)

Đoạn mã sau loại bỏ hoàn toàn khoảng trắng xung quanh các phần:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.