UIPageControl 下 UIScrollView 中的 UISearchDisplayController UISearchBar 动画

Posted

技术标签:

【中文标题】UIPageControl 下 UIScrollView 中的 UISearchDisplayController UISearchBar 动画【英文标题】:UISearchDisplayController UISearchBar Animation in a UIScrollView under UIPageControl 【发布时间】:2014-06-19 02:53:49 【问题描述】:

这是一个很难解决的错误,我的 ObjC-fu 只是真正的初学者,我研究这个漂亮错误的时间越长,我的信心就崩溃了......

应用程序需要有一个带有UIPageControlUIScrollView 的视图(我们称之为mainView),以便有2 个可水平滚动的视图。因此,我通过添加来实现它:

// This is added on viewDidLoad...
[self addChildViewController:[self.storyBoard instantiateViewControllerWithIdentifier:@"VC1"]];
[self addChildViewController:[self.storyBoard instantiateViewControllerWithIdentifier:@"VC2"]];

// Further processing of the child view controllers...
self.scrollView.pagingEnabled = YES;

for (NSUInteger i = 0; i < [self.childViewControllers count]; i++) 
    UIViewController *controller = [self.childViewControllers objectAtIndex:page];
    CGRect frame = self.scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [self.scrollView addSubview:controller.view];


// Expanding scroll view's content size for scrolling...
self.scrollView.contentSize = CGSizeMake(
    scrollView.frame.size.width * [self.childViewControllers count], 
    scrollView.frame.size.height);

请注意,mainView 本身配备了UISearchDisplayController,并在屏幕外隐藏了UISearchBar。 (不确定这些信息是否重要。)

问题是在标识符为 VC2 的第二个子视图控制器中还配备了 UISearchDisplayController 具有 UISearchBar,当搜索栏在结束搜索时消失时,动画如何使 VC2 的 UISearchBar 重新定位在CGRect(0, 0, 320, 40)mainView 中,而不是VC2。因此 VC2 的 UISearchBar “变形”回 VC1。

解决此问题的第一次尝试是将每个子视图控制器包含在另一个视图中,希望 VC2 的 UISearchBarCGRect(0, 0, 320, 40) 将保留在 VC2 中,但无济于事:

for (NSUInteger i = 0; i < [self.childViewControllers count]; i++) 
    UIViewController *controller = [self.childViewControllers objectAtIndex:page];
    CGRect frame = self.scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    //controller.view.frame = frame;
    UIView *container = [[UIView alloc] initWithFrame:frame];
    [container addSubview:controller.view];
    [self.scrollView addSubview:container];

不知何故,我猜测 VC2 的 UISearchDisplayController 动画时它是 UISearchBar 它使用的 frame 实际上是 self.UIScrollView 之一,但我不确定。

谁能帮我解释一下这个虫子,然后把它烧死?它在 ios7 中

     Main View
-------------------
|      VC1        |       VC2
-------------------------------------
|                 |_________________| <- Search Bar (This will 'warped' to VC1 at the same
|                 |                 |    position on end editing)
|                 |                 |
|                 |                 |
|                 |                 |
|                 |                 |
|                 |                 |
|                 |                 |
|                 |                 |
|                 |                 |
-------------------------------------

【问题讨论】:

【参考方案1】:

找到了一个解决方案,很奇怪,但它有效,在注意到UISearchBar 的超级视图的内存地址在结束搜索时发生了更改后,从SearchBar disappears from headerview in iOS 7 得到了这个想法。

以下代码 sn-p 添加了任何可能的委托方法,即viewWillAppearsearchDisplayControllerWillEndSearch:searchDisplayControllerDidEndSearch:

if (self.searchDisplayController.searchBar.superview != self.searchDisplayController.searchContentsController.view) 
    [self.searchDisplayController.searchBar removeFromSuperview];
    [self.searchDisplayController.searchContentsController.view addSubview:self.searchDisplayController.searchBar];

会接受这个作为答案,但如果这个分享有什么问题的话。非常感谢。

【讨论】:

以上是关于UIPageControl 下 UIScrollView 中的 UISearchDisplayController UISearchBar 动画的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIScrollView 和 UIPageControl 实现图像视图库并预览下一张和上一张图像?

访问由iOS6的UIPageViewController创建的UIPageControl?

如何将 UIPageControl 与 iCarousel 一起使用?

UIPageControl UIScrollView 动画效果

如何从导航栏中删除 UIPageControl?

具有 UIPageControl 性能问题的自定义 UIScrollview