0

我有一个 UITableView 我正在应用一组过滤器。当我点击“过滤器”按钮时,过滤器从导航栏下方动画。我在这里做的是获取一个我加载的NIB,并将其添加到UITableView 的超级视图中。当我启动视图时,这非常有效。我能够显示和隐藏过滤器 NIB。但是,在通过点击主页按钮将应用程序发送到后台后,我再次启动应用程序以将其带到前台。现在,我加载并附加到 UITableView 的超级视图的 NIB 已经占据了屏幕。表格视图隐藏在此视图下方,通过隐藏过滤器 NIB,我可以看到一小部分命中。尽管我添加到 superview 的 NIB 高度为 75,但当它进入前景时,我可以看到它的框架现在的大小超过 400。有没有人知道为什么超级视图会发生这种情况?谢谢

我的代码

- (IBAction)filterButtonPressed:(UIBarButtonItem *)sender
{
    //If the filter view is displayed on screen then remove it.
    if(self.filterViewDisplayed == YES){
        [self animateFilterButtonsWithButtonsYOrigin:-75 tableViewYOrigin:-75];
        self.filterViewDisplayed = NO;

    }else {
        //Determine if we should load the FilterButtons XIB
        if(self.filterViewLoaded == NO) {

            self.filterViewLoaded = YES;
            [self.tableView.superview addSubview:self.activityFilter];
        }
        self.filterViewDisplayed = YES;
        //Set the delegate of the ActivityFilter to self so that we can handle callbacks.
        self.activityFilter.delegate = self;

        //Set the intial frame of the filter buttons to be -75 pixels off the top of the screen
        CGRect filterFrame = self.activityFilter.frame;
        filterFrame.origin.y = -75;
        self.activityFilter.frame = filterFrame;

        //Now animate the filter buttons to appear at origin 0.
        [self animateFilterButtonsWithButtonsYOrigin:0 tableViewYOrigin:75];
    }
}

- (void)animateFilterButtonsWithButtonsYOrigin:(CGFloat)yOrigin tableViewYOrigin:(CGFloat)tableViewYOrigin
{
    [UIView animateWithDuration:0.25
                     animations:^{
                         CGRect filterFrame = self.activityFilter.frame;
                         filterFrame.origin.y = yOrigin;
                         self.activityFilter.frame = filterFrame;
                         [self adjustTableViewOriginBy:tableViewYOrigin];
                     }];
}

-(void)adjustTableViewOriginBy:(CGFloat)yOrigin
{
    CGRect tableFrame = self.tableView.frame;
    tableFrame.origin.y += yOrigin;
    self.tableView.frame = tableFrame;
}

截图

  1. 过滤动画之前
  2. 应用过滤器后
  3. 从后台启动后 - 问题在这里。Superview 占据整个视图
  4. 隐藏过滤器显示超级视图下方的表格视图

过滤动画之前

应用过滤器后

从后台启动后

隐藏过滤器在超级视图下方显示 UiTableView

4

1 回答 1

0

我在我的应用程序中使用ECSlidingViewController作为菜单。我发现这会截取顶级视图的屏幕截图,以便看起来像禁用与视图的交互。这样做的结果是顶级视图,即超级视图,包含我加载的 NIB 文件。这就是我所看到的。我已经通过禁用 ECSlidingViewController 的屏幕捕获功能来修复它。

于 2013-01-24T11:25:45.513 回答