xcode iPhone:隐藏/显示工具栏
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8294736/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
iPhone : Hiding / showing Toolbar
提问by Pantelis Proios
I have a toolbar on top of my view with a back button. I would like when the view loads to appear with the toolbar hidden and then, with a touch of the button to appear animated.
我的视图顶部有一个工具栏,带有后退按钮。我希望当视图加载时显示工具栏隐藏,然后触摸按钮显示动画。
--Edit-- I am not using a Navigation Controller.
--编辑--我没有使用导航控制器。
采纳答案by tarmes
Given new information - that there's no UINavigationController - things are different. Here are the relevant bits from my code...
有了新信息——没有 UINavigationController——事情就不同了。这是我的代码中的相关位...
Create the nav bar and add it to your view:
创建导航栏并将其添加到您的视图中:
// Create the navigation bar
self.navBar = [[UINavigationBar alloc] init];
[self.view addSubview:self.navBar];
Lay it out..
放出来。。
- (CGRect)frameForOrientation:(UIInterfaceOrientation)theOrientation
{
UIScreen *screen = [UIScreen mainScreen];
CGRect fullScreenRect = screen.bounds; // always implicitly in Portrait orientation.
CGRect appFrame = screen.applicationFrame;
// Find status bar height by checking which dimension of the applicationFrame is narrower than screen bounds.
// Little bit ugly looking, but it'll still work even if they change the status bar height in future.
float statusBarHeight = MAX((fullScreenRect.size.width - appFrame.size.width), (fullScreenRect.size.height - appFrame.size.height));
// Initially assume portrait orientation.
float width = fullScreenRect.size.width;
float height = fullScreenRect.size.height;
// Correct for orientation.
if (UIInterfaceOrientationIsLandscape(theOrientation)) {
width = fullScreenRect.size.height;
height = fullScreenRect.size.width;
}
// Account for status bar, which always subtracts from the height (since it's always at the top of the screen).
height -= statusBarHeight;
return CGRectMake(0, statusBarHeight, width, height);
}
- (CGSize)viewSizeForOrientation:(UIInterfaceOrientation)theOrientation
{
CGRect frame = [self frameForOrientation:theOrientation];
return CGSizeMake(frame.size.width, frame.size.height);
}
- (void)layoutSubviewsForInterfaceOrientation:(UIInterfaceOrientation)theOrientation withAnimation:(BOOL)animate
{
CGSize fullSize = [self viewSizeForOrientation:theOrientation];
float width = fullSize.width;
float height = fullSize.height;
CGRect newFrame = CGRectMake(0, 0, width, height);
SubViewController *controller;
UIView *theView;
// Place the navigation bar
CGRect navBarFrame = newFrame;
navBarFrame.size.height = NAVBARHEIGHT;
self.navBar.frame = navBarFrame;
}
Create a function to who it/hide it:
创建一个函数给谁/隐藏它:
- (void)showNavigationBar:(BOOL)show
{
if (show == YES && self.navBar.hidden == YES) {
// Move the frame out of sight
CGRect frame = self.navBar.frame;
frame.origin.y = -frame.size.height;
self.navBar.frame = frame;
// Display it nicely
self.navBar.hidden = NO;
frame.origin.y = 0.0;
[self.view bringSubviewToFront:self.navBar];
[UIView animateWithDuration:0.3
animations:^(void) {
self.navBar.frame = frame;
}
];
}
else if (show == NO && self.navBar.hidden == NO) {
CGRect frame = self.navBar.frame;
// Display it nicely
frame.origin.y = -frame.size.height;
[self.view bringSubviewToFront:self.navBar];
[UIView animateWithDuration:0.3
animations:^(void) {
self.navBar.frame = frame;
}
completion:^(BOOL finished) {
self.navBar.hidden = YES;
}
];
}
}
where
在哪里
#define NAVBARHEIGHT 44
回答by tarmes
Before the view is shown:
在显示视图之前:
[self.navigationController setToolbarHidden:YES];
When you press the button:
当您按下按钮时:
[self.navigationController setToolbarHidden:NO];
回答by Herman Schoenfeld
Here's some of tarmes's code ported to MonoTouch/c#.
下面是一些移植到 MonoTouch/c# 的 tarmes 代码。
public static RectangleF FrameForOrientation(UIInterfaceOrientation orientation) {
var screen = UIScreen.MainScreen;
var fullScreenRect = screen.Bounds; // always implicitly in Portrait orientation.
var appFrame = screen.ApplicationFrame;
// Find status bar height by checking which dimension of the applicationFrame is narrower than screen bounds.
// Little bit ugly looking, but it'll still work even if they change the status bar height in future.
var statusBarHeight = Math.Max((fullScreenRect.Width - appFrame.Width), (fullScreenRect.Height- appFrame.Height));
// Initially assume portrait orientation.
var width = fullScreenRect.Width;
var height = fullScreenRect.Height;
// Correct for orientation.
if (IsLandscapeOrientation(orientation)) {
width = fullScreenRect.Height;
height = fullScreenRect.Width;
}
// Account for status bar, which always subtracts from the height (since it's always at the top of the screen).
height -= statusBarHeight;
return new RectangleF(0, statusBarHeight, width, height);
}
public static SizeF SizeForOrientation(UIInterfaceOrientation orientation) {
var frame = FrameForOrientation(orientation);
return new SizeF(frame.Width, frame.Height);
}
public static bool IsLandscapeOrientation(UIInterfaceOrientation orientation) {
return
orientation == UIInterfaceOrientation.LandscapeLeft ||
orientation == UIInterfaceOrientation.LandscapeRight;
}