0

我正在尝试更新我的应用程序,以便它在 iOs7 上正常工作。

在 iOS 5 和 6 中,这非常有效:

if ([segue.identifier isEqualToString:@"popover"])
{
    FavoritesViewController *vc = segue.destinationViewController;
    CGFloat width = 200.0;
    CGRect rect = [vc.tableView rectForSection:[vc.tableView numberOfSections] - 1];
    CGFloat height = CGRectGetMaxY(rect);

    if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]])
    {  
        _filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];
        [_filterPopoverController setPopoverContentSize:CGSizeMake(width, height)];  
        [_filterPopoverController setDelegate:self];
    }
}
}

我用它来检查它是否已经在屏幕上

- (IBAction)touchedFilterButton:(UIBarButtonItem *)sender 
{
    if (_filterPopoverController == nil)
    {
        [self performSegueWithIdentifier:@"popover" sender:self];
    }
    else
    {
        [_filterPopoverController dismissPopoverAnimated:YES];
        _filterPopoverController = nil;
    }
}

如果我删除这条线

    _filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];

它可以工作,但我无法设置宽度/高度,并且没有检查它是否在屏幕上。

4

1 回答 1

1

问题是iOS7不是那么“宽容”

我打电话

    _filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];

CGFloat width = 200.0;
CGRect rect = [vc.tableView rectForSection:[vc.tableView numberOfSections] - 1];
CGFloat height = CGRectGetMaxY(rect);

高度始终为 0.000,因为它还没有“显示”,所以我必须在调用另一个视图控制器并设置宽度后替换 segue。我删除了子类部分,因为它肯定已经是子类了

FavoritesViewController *vc = segue.destinationViewController;
_filterPopoverController = [(UIStoryboardPopoverSegue *)segue popoverController];

CGFloat width = 200.0;
CGRect rect = [vc.tableView rectForSection:[vc.tableView numberOfSections] - 1];
CGFloat height = CGRectGetMaxY(rect);

[_filterPopoverController setPopoverContentSize:CGSizeMake(width, height)];
[_filterPopoverController setDelegate:self];
于 2013-10-11T13:28:59.977 回答