не удалось установить высоту динамического UITableView в цели - PullRequest
3 голосов
/ 23 января 2012

Я создал приложение для iPad, в котором я использовал searchBar, в searchBar данные поступают из базы данных, и я сохраняю их в массиве с именем tableData.

После этого я передаю этот массив tabledata в tableViewназывается myTableView, я объявил высоту табличного представления в методе 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];
}

объявление myTableView в didLoad:

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

см. Скриншот, в первом изображении данные есть, но tableView не увеличивает его размер, а во втором изображении есть только 1 данные, но высотавсе еще исправлено.

screen screen

Ответы [ 3 ]

6 голосов
/ 23 января 2012

Как сказал Атулкумар В. Джайн, попробуйте следующее: в методе - (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 голос
/ 23 января 2012

В методе - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText измените высоту таблицы в соответствии с количеством записей, представленных в массиве. Как вы, возможно, знаете высоту строки, так и можете динамически изменять высоту представления таблицы, используя следующую строку

tableview.frame.size.height = ROW_HEIGHT*NO_OF_DATA_IN_ARRAY

Надеюсь, это решит вашу проблему.

0 голосов
/ 23 января 2012

Вы можете использовать Метод делегата UITableView, - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath;

внутри вы можете динамически устанавливать высоту строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...