无法在目标c中设置UITableView动态的高度

时间:2012-01-23 10:24:20

标签: ios cocoa-touch uitableview

我创建了一个iPad应用程序,其中我使用了searchBar,searchBar数据来自数据库,我将它存储在一个名为tableData的数组中。

在此之后我将这个tabledata数组传递给名为myTableView的tableView,我在didLoad方法中声明了表视图的高度。

我希望tableView的高度根据表中的元素数量

是动态的

这是代码段,

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    // only show the status bar’s cancel button while in edit mode

    sBar.autocorrectionType = UITextAutocorrectionTypeNo;
    // flush the previous search content
    [tableData removeAllObjects];
}


- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    sBar.showsCancelButton = NO;
    [myTableView setHidden:TRUE];
}


- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    [myTableView setHidden:FALSE];
    [tableData removeAllObjects];// remove all data that belongs to previous search
    myTableView.backgroundColor=[[UIColor alloc]initWithRed:4.0 / 255 green:24.0 / 255 blue:41.0 / 255 alpha:1.0];


    [self.view bringSubviewToFront:myTableView];

    if([searchText isEqualToString:@""]||searchText==nil){
        [myTableView setHidden:TRUE];
        [myTableView reloadData];
        return;
    }
    NSInteger counter = 0;
    for(NSString *name in arr)
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
        NSRange r = [name rangeOfString:searchText options:NSCaseInsensitiveSearch];

        if(r.location != NSNotFound)
        {
            if(r.location== 0)//that is we are checking only the start of the naames.
            {
                [tableData addObject:name];
            }
        }
        counter++;
        [pool release];
    }
    [myTableView reloadData];
}


- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    // if a valid search was entered but the user wanted to cancel, bring back the main list content
    [tableData removeAllObjects];

    @try{
        [myTableView reloadData];
    }
    @catch(NSException *e){
    }
    [sBar resignFirstResponder];
    sBar.text = @"";
}


// called when Search (in our case “Done”) button pressed
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{

    [searchBar resignFirstResponder];
    [myTableView reloadData];
}

在didLoad中声明myTableView:

myTableView.frame=CGRectMake(550, 00, 220,400);

看截图, 在第一个图像数据中,但是,tableView不会增加它的大小,在第二个图像中只有1个数据,但高度仍在修复。

screen screen

3 个答案:

答案 0 :(得分:6)

正如Atulkumar V. Jain所说的尝试:在- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText方法中调整表格框架的大小如下:

CGRect frame = myTableView.frame;
frame.size.height = MIN(40 * [tableData count], 400); // 400 is the maximum height that the table view can have. You can change it to whatever you like
myTableView.frame = frame;

请告诉我这是否适合您。

答案 1 :(得分:1)

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText方法中,根据数组中记录的数量更改tableview的高度。由于您可能知道行的高度,因此可以使用以下行动态地更改tableview的高度

tableview.frame.size.height = ROW_HEIGHT*NO_OF_DATA_IN_ARRAY

希望这能解决你的问题。

答案 2 :(得分:0)

你可以使用      UITableView委托方法, - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

在这里你可以动态设置行的高度