我有一个 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;
}
截图
- 过滤动画之前
- 应用过滤器后
- 从后台启动后 - 问题在这里。Superview 占据整个视图
- 隐藏过滤器显示超级视图下方的表格视图