UIButton 隐藏在 UIToolbar 后面
Posted
技术标签:
【中文标题】UIButton 隐藏在 UIToolbar 后面【英文标题】:UIButton hidden behind UIToolbar 【发布时间】:2013-04-26 03:28:44 【问题描述】:上下文
我有一个要添加的 UIButton,方法如下:
[self.view addSubview:[self returnCustomSubmitButton]];
我没有将工具栏添加为子视图,而是将 ViewControllers navigationController 属性 toolBarHidden 设置为 NO。 - [self.navigationController setToolbarHidden:NO animated:NO];
at viewWill 会出现
额外细节
我这样做的原因是因为我想在下面创建类似于工具栏的东西(注意:这是一个 UITabBar,但我正在寻找相同的形状) - 所以我要添加一个工具栏,然后添加一个 UIButton 到 viewControllers 视图并使用工具栏坐标来定位 UIButton
我试图遵循这一点(注意:这也是针对 UITabBar 的),但正在苦苦挣扎:http://idevrecipes.com/2010/12/16/raised-center-tab-bar-button/
问题
(我希望它位于工具栏的顶部)。
问题
我该如何解决这个问题? 将 UIButton 转换为 UIBarButtItem 会更好吗?并将 UIButton 添加到 viewController 的 toolbarItems 数组? 我该怎么做?更新
经过多次尝试解决这个问题,这是否与我正在使用 UINavigationController 以及我将 UIButton 添加到“自定义内容”区域并且导航工具栏位于其顶部的事实有关无论我做什么。见下文:
【问题讨论】:
只是为了避免混淆......这个(截图+链接)是UITabBar
好点 - 我将包括问题。
关于您的上次更新(自定义内容),我在回答中对此进行了解释。
【参考方案1】:
虽然我认为最好的解决方案是以编程方式创建您的UIToolbar
,然后创建并添加任何自定义UIBarButtonItem
s,但您的问题可能有以下解决方案:
(注意:Apple 表示you must not try to modify UINavigationController
's default toolbar,因此如果您打算这样做,请尝试上述建议)
- (void)viewDidLoad
[super viewDidLoad];
// Show the default toolbar
[self.navigationController setToolbarHidden:NO];
// Create a UIButton
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:@"btn"] forState:UIControlStateNormal];
[button sizeToFit];
// Add your targets/actions
[button addTarget:self action:@selector(doSomething:) forControlEvents:UIControlEventTouchUpInside];
// Position the button
// I am sure that there must be
// a million better ways to do this
// (it's here just to illustrate the point)
button.center = self.navigationController.toolbar.center;
CGRect frame = button.frame;
frame.origin.y = CGRectGetMaxY([UIScreen mainScreen].bounds) - button.frame.size.height;
button.frame = frame;
// Here is the tricky part. Toolbar is not part
// of your controller's view hierarchy, it belongs
// to the navigation controller. So add the button there
[self.navigationController.view addSubview:button];
【讨论】:
它还在后面。继续挖掘。 @drc 我很肯定这可行,在发布答案之前我已经测试了代码。 我会继续努力让它发挥作用。感谢您迄今为止的帮助和您的时间,非常感谢。 不用担心。我总是很乐意提供帮助。 您能否澄清您对 Apple 指南关于不修改“默认工具栏”的评论,我计划在应用程序中使用自定义工具栏,我正在创建一个 UIToolBar 并将其添加为UIViewController,但是我恢复使用navigationController setToolBarHidden NO,因为我正在努力保持工具栏@正确的Y位置。该应用程序还在特定上下文中隐藏和显示导航栏,当尝试支持 4 英寸屏幕高度时,它变得过于复杂,无法继续设置“自定义”工具栏的框架。【参考方案2】:利用这段代码。
[self.view bringSubviewToFront:yourButton];
这应该可以解决您的问题。
【讨论】:
这似乎不起作用,让我明天跟进更多细节。 我没有将工具栏添加为子视图,我将 ViewControllers navigationController 属性 toolBatHidden 设置为 NO。 - [self.navigationController setToolbarHidden:NO动画:NO];在视图中会出现【参考方案3】:使用此代码
[self.view insertSubview:[self returnCustomSubmitButton] aboveSubview:toolbar];
那么您的按钮将位于工具栏上方。
【讨论】:
谢谢,这似乎也不起作用,让我早上再检查一下。【参考方案4】:UIToolbar *toolbar = [[UIToolbar alloc] init];
toolbar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44);
NSMutableArray *items = [[NSMutableArray alloc] initWithObjects:your buttons, nil]
[toolbar setItems:items];
[self.view addSubview:toolbar];
这可能对你有帮助
【讨论】:
按钮是 UIButton 而不是 UIBarButtonItem。以上是关于UIButton 隐藏在 UIToolbar 后面的主要内容,如果未能解决你的问题,请参考以下文章
如何用 UIToolbar 之类的色调绘制 UIButton
如何在 UIToolbar 完成按钮中将焦点从一个 UIButton 设置到另一个 UIButton