2012-10-21 28 views
11

Tôi có UITableView với số lượng hàng (ô) thay đổi - chiều cao của các hàng này là không đổi. Những gì tôi muốn là làm cho chiều cao của UITableView phụ thuộc vào số lượng hàng.Độ cao UITableView dựa trên số lượng ô

Ngoài ra, tôi muốn UITableView chính xác là gói các ô, do đó không có đệm ở phía dưới. Vì vậy, nếu một ô có chiều cao 60, tableview phải là 60 cho một ô, 120 cho hai ô, v.v.

Cảm ơn trước!

Trả lời

28

Bạn có thể truy cập nguồn dữ liệu của mình để tìm số lượng ô sẽ được hiển thị. Nhân số này với chiều cao của một hàng và bạn nhận được chiều cao của toàn bộ bảng. Để thay đổi chiều cao của chế độ xem bảng, bạn có thể thay đổi thuộc tính khung của bảng.

Bạn có thể truy cập chiều cao (không đổi) của một hàng trong chế độ xem bảng bằng cách truy cập thuộc tính rowHeight của nó. Nếu bạn điền vào xem bảng của bạn với các đối tượng của một mảng gọi myArray, bạn có thể sử dụng đoạn mã sau:

CGFloat height = self.tableView.rowHeight; 
height *= myArray.count; 

CGRect tableFrame = self.tableView.frame; 
tableFrame.size.height = height; 
self.tableView.frame = tableFrame; 

Bạn cũng có thể tìm ra bao nhiêu hàng xem bảng sẽ chứa bằng cách yêu cầu xem bảng riêng của mình, thay vì của đối tượng dữ liệu. Một cái gì đó như thế này sẽ hoạt động:

NSInteger numberOfCells = 0; 

//finding the number of cells in your table view by looping through its sections 
for (NSInteger section = 0; section < [self numberOfSectionsInTableView:self.tableView]; section++) 
    numberOfCells += [self tableView:self.tableView numberOfRowsInSection:section]; 

CGFloat height = numberOfCells * self.tableView.rowHeight; 

CGRect tableFrame = self.tableView.frame; 
tableFrame.size.height = height; 
self.tableView.frame = tableFrame; 

//then the tableView must be redrawn 
[self.tableView setNeedsDisplay]; 
+0

Cảm ơn bạn đã dành thời gian để giải quyết vấn đề. Tôi đã tiêm mã (thích hợp cho trường hợp của tôi) trong phương thức viewDidLoad của tôi, nhưng nó không thay đổi kích thước của UITableView. –

+0

Tôi đã thêm một ví dụ khác cho bạn, hy vọng điều đó sẽ hữu ích. –

+4

tốt, việc tìm số ô không phải là vấn đề và tính chiều cao cũng không phải là. Đó là một thực tế là chiều cao của khung tableView không thay đổi (có phải điều này có thể vì mã của tôi sống trong ViewDidLoad? –

2

Đây là cách tôi giải quyết.

CGFloat height = self.mMyTicketTable.rowHeight; 

float h = height * [self.mArrEName count]; 
if(h > 410.0) 
{ 
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, 410); 
} 
else 
{ 
    self.mMyTicketTable.frame = CGRectMake(0, 50, self.mMyTicketTable.frame.size.width, h); 
} 
NSLog(@"h:%f", h); 
2

Triển khai phương thức ủy quyền UITableView này. Bất cứ khi nào một hàng tế bào tạo ra nó gán chiều cao cho mỗi tế bào

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return 60.0f; 
} 

và triển khai mã này trong phương pháp viewDidLoad

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))]; 

Lưu ý: - yourArray là một NSArray có chứa dữ liệu mà có bao nhiêu hàng bạn muốn để thùng.

HOẶC

Nếu yourArray tìm nạp giá trị động sau đó gọi phương thức này sau khi tìm nạp giá trị.

-(void)setHeightOfTableView 
{ 

    /**** set frame size of tableview according to number of cells ****/ 
    float height=60.0f*[yourArray count]; 

[yourTableView setFrame:CGRectMake(yourTableView.frame.origin.x, yourTableView.frame.origin.y, yourTableView.frame.size.width,(60.0f*([yourArray count])))]; 
} 

Tôi hy vọng nó hoạt động. Cảm ơn

2

tôi đã thực hiện một chức năng để thiết lập chiều cao UITableView theo @ timvermeulen của mã

-(void)setTableViewheightOfTable :(UITableView *)tableView ByArrayName:(NSArray *)array 
{  
    CGFloat height = tableView.rowHeight; 
    height *= array.count; 

    CGRect tableFrame = tableView.frame; 
    tableFrame.size.height = height; 
    tableView.frame = tableFrame; 
} 
0

Nếu bạn thích bạn có thể sử dụng phương pháp đại biểu tableView:numberOfRowsInSection: để thiết lập chiều cao UITableView động, như thế này:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    CGFloat numberOfRows = self.myArray.count; 

    CGRect tableViewFrame = tableView.frame; 
    tableViewFrame.size.height = numberOfRows * tableView.rowHeight; 
    tableView.frame = tableViewFrame; 

    return numberOfRows; 
} 

Hãy nhớ cũng xác định rowHeight nơi bạn bắt đầu chế độ xem bảng:

self.myTableView.rowHeight = 60.0; 

...nhưng nếu mục tiêu của bạn chỉ là để che giấu các ô trống trong bảng, bạn nên thêm một cái nhìn trống để nó tableFooterView thay vào đó và bỏ qua tất cả các mã trên (vì vậy hãy thử này đầu tiên):

self.myTableView.tableFooterView = [UIView new]; 
Các vấn đề liên quan