如何用它的父视图转换 UIToolbar

Posted

技术标签:

【中文标题】如何用它的父视图转换 UIToolbar【英文标题】:How to transition UIToolbar with it's parent view 【发布时间】:2011-05-11 16:39:12 【问题描述】:

如何从一个 UIViewController(带有底部工具栏)过渡到另一个(不带工具栏),以便在动画进行时,工具栏与第一个视图一起移开,这意味着工具栏保持在其初始位置第一个视图?

我在“事物”应用中看到了这种行为。

为了清楚起见,我不是在寻找诸如在 viewDidAppear 中隐藏/显示工具栏之类的解决方案。

【问题讨论】:

【参考方案1】:

所以,这是一个我不太满意的解决方案,但目前它似乎是唯一的一个。

关键是忽略 UINavigationController 的内置工具栏属性,创建单独的 UIToolbar 并将其放置在您的视图控制器中。

// Create your bar items
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

NSArray *toolbarItems = [[NSArray alloc] initWithObjects: flexibleSpace, nil];
[flexibleSpace release], flexibleSpace = nil;

UIToolbar *customToolbar = [[UIToolbar alloc] init];
[customToolbar sizeToFit];
[customToolbar setFrame:CGRectMake(0.0, self.view.frame.size.height - self.navigationController.navigationBar.frame.size.height - customToolbar.frame.size.height, customToolbar.frame.size.width, customToolbar.frame.size.height)];
[customToolbar setItems:toolbarItems];
[[self view] addSubview:customToolbar];
[customToolbar release], customToolbar = nil;

[toolbarItems release], toolbarItems = nil;

这样工具栏将随着它的视图滑开,不会导致动画问题,例如“白色矩形”或放置在 viewDidAppear 中的工具栏延迟出现...

【讨论】:

我发现这真的很有帮助。进一步的提示:您可以在导航控制器工具栏上的故事板中设置工具栏项目,即使该工具栏是隐藏的。然后你可以说:[customToolbar setItems:self.toolbarItems];【参考方案2】:

听起来像你想要的:

- ( void )viewWillAppear: (BOOL)animated

    NSArray            *items = ... UIBarButtonItem array...;

    [ super viewWillAppear: animated ];

    [ self setToolbarItems: items animated: animated ];

    ....

【讨论】:

我想我不是很清楚。您的建议与工具栏项目有关,而不是工具栏本身,它将在第二个视图中保留工具栏。我希望工具栏与第一个视图一起滑出。因此工具栏在第一个视图上可见,但在第二个视图上不可见。

以上是关于如何用它的父视图转换 UIToolbar的主要内容,如果未能解决你的问题,请参考以下文章

如何用rmdir删除文件夹?

UIScrollview,可以一直往下拉到后面可以看到它的父视图

如何将触摸事件从 ScrollView 子视图传递到它的父视图

如何用 QSqlTableModel 中的列替换行?

如何用tensorflow把矩阵转换为张量

Swift 4:防止UIView的子视图移动到它的父节点之外