UITableView и фоновое изображение сдвигаются вниз после закрытия модалвью - PullRequest
0 голосов
/ 12 августа 2011

У меня есть представление с панелью вкладок и представлением таблицы.В определенный момент я вызываю модальное представление, и когда я отклоняю его, исходное представление, кажется, растягивается или смещается вниз, поскольку фоновое изображение ниже, а табличное представление длиннее до точки, в которой последняя ячейка выходит за пределы кадра.

Я вызываю модальное представление из tableView:didSelectRowAtIndexPath:

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSMutableDictionary *row        = [[[[self.productDetails valueForKey:@"sections"] objectAtIndex:indexPath.section] valueForKey:@"rows"] objectAtIndex:indexPath.row];
    NSMutableDictionary *post       = [self.productDetails valueForKey:@"post"];
    if ([[row valueForKey:@"type"] isEqualToString:@"pick"])
    {
        self.xPicker                = nil;
        self.xPicker.options        = nil;
        self.pickerOptions          = nil;
        self.xPicker                = [[[TablePicker alloc] initWithNibName:@"TablePicker" bundle:[NSBundle mainBundle]] autorelease];
        NSMutableDictionary *newPicker  = [[[NSMutableDictionary alloc] init] autorelease];
        [newPicker setValue:[NSString stringWithFormat:@"%d", indexPath.section] forKey:@"section"];
        [newPicker setValue:[NSString stringWithFormat:@"%d", indexPath.row] forKey:@"row"];
        [newPicker setValue:[row valueForKey:@"options"] forKey:@"options"];
        [newPicker setValue:[row valueForKey:@"value"] forKey:@"value"];
        self.xPicker.options        = [NSMutableDictionary dictionaryWithDictionary:newPicker];
        self.pickerOptions          = [NSDictionary dictionaryWithDictionary:newPicker];
        self.xPicker.view.frame     = self.view.bounds;
        [self presentModalViewController:self.xPicker animated:YES];
    }
}

Внутри контроллера модального представления я делаю некоторые вещи, затем запускаю уведомление, чтобы родительский контроллер знал, что это нормально.отклонить это.Эта часть кажется неправильной, но я иногда получал сообщение об ошибке, когда у меня был вызов модального представления:

[self.parentViewController dismissModalViewControllerAnimated:YES];

В любом случае, блок кода, в котором я отклоняю модальное представление, выглядит следующим образом:

- (void) reloadCell
{
    [self dismissModalViewControllerAnimated:YES];
    if (self.xPicker.choice != nil)
    {
        NSDictionary *choice        = self.xPicker.choice;
        NSMutableDictionary *row    = [[[[self.productDetails valueForKey:@"sections"] objectAtIndex:[[choice valueForKey:@"section"] intValue]] valueForKey:@"rows"] objectAtIndex:[[choice valueForKey:@"row"] intValue]];
        [row setObject:[choice valueForKey:@"value"] forKey:@"value"];
        [[self.productDetails valueForKey:@"post"] setObject:[choice valueForKey:@"value"] forKey:[row valueForKey:@"key"]];
        Request *xReq               = [[[Request alloc] init] autorelease];
        [NSThread detachNewThreadSelector:@selector(updateOrderFromProductDetails:) toTarget:xReq withObject:[self.productDetails valueForKey:@"post"]];
        self.xPicker                = nil;
    }
}

Я не знаю, связано ли это, но мне показалось интересным, что, когда я представляю этот модальный контроллер, когда устройство находится в альбомном режиме, вид становится шатким.

Кто-нибудь знает, какчтобы исправить это?

Редактировать: После некоторого поиска выясняется, что обе проблемы связаны и имеют отношение к тому, что мой текущий контроллер представления является подпредставлением другого представленияконтроллер, но не через навигационный контроллер.

Насколько я понимаю, мое решение не использовать навигационный контроллер как-то путает мой стек представлений.У меня было чувство, что я снова укушу меня в зад.

К сожалению, я не могу найти решение моей проблемы где-либо.

Ответы [ 3 ]

0 голосов
/ 12 августа 2011

Если у вас есть перо, связанное с представлениями - перейдите в перо для каждого вида и установите следующие атрибуты в главном представлении в каждом перо:

строка состояния: не указано

topполоса: не указано

нижняя полоса: не указано

Тогда в размере: x: 0, y: 0, W: 320, H480

Вернуться в код после вас 'Выделив каждое представление, также установите для свойства 'wantFullScreenLayout значение TRUE для каждого представления.

Редактировать: объяснение (? может быть?: -))

Если в перо указана строка состояниязатем uikit автоматически настраивает ваши представления для соответствия строке состояния (и вы увидите, что yorigin вашего представления равен 0, а высота - 460 в наконечнике), но если вы посмотрите на смещение / высоту в кадре в вашем методе viewDidAppear, егобыл установлен на 20/460 для обслуживания строки состояния.

По некоторым причинам представление контроллеров модального представления, кажется, мешает с этим и снова настраивается на строку состояния, смещая ваш взгляд вниз еще на 20. Установка строки состояния на неопределенный и установка макета wantFullScreen останавливает смешивание uikit с вашим фреймом и даетВы контролируете (следовательно, устанавливая высоту до 480 в размере пера).

Вам также нужно будет переместить все элементы вида вниз на 20, чтобы обеспечить высоту строки состояния в представлении высоты 480.

0 голосов
/ 12 августа 2011

Хорошо, у меня есть одно решение этой проблемы.

Вместо того, чтобы мой текущий вызов контроллера представления presentModalViewController, я вызываю его из appDelegate tabBarController примерно так:

[[(myAppDelegate *)[[UIApplication sharedApplication] delegate] tabBarController] presentModalViewController:self.myModalViewController animated:YES];

Это все еще кажется немного странным, но оно решает обе проблемы

1) изменение размера при отклонении модального вида

2) модальный вид не может появиться в ландшафтном режиме

Я надеюсь, что это может помочь кому-то еще в этом жестоком мире Apple.

0 голосов
/ 12 августа 2011

Когда ваш главный вид вернется, попробуйте добавить:

[myTableView setFrame:CGRectMake(0,0,320,411)];.

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