iOS 中未显示工具栏
Toolbar doesn't show up in iOS
我是 iOS 的新手,使用以下代码显示工具栏。
相同的代码适用于其他屏幕。
我已经调试了代码,它进入显示工具栏方法并完成 viewDidLoad 方法,没有任何异常。然后工具栏也没有出现..
但是在UI中没有显示工具栏..请帮我解决这个问题...
下面是实现代码
@implementation HistoryViewController
@synthesize wasLandscape;
- (HistoryViewController *)init {
if (self = [super init]) {
//Set App Delegate
appDelegate = [[UIApplication sharedApplication] delegate];
//Set up an encyclopedia object for me
encBook = [[Encyclopedia alloc] init];
[[appDelegate prefsdb] loadHistoryEncyclopedia:encBook];
}
return self;
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return YES;
}
//Handle appearance
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
//Kill the old, make the new
[self hideToolbar];
[self showToolbar];
}
//Handle appear include Toolbar
- (void)viewWillAppear:(BOOL)animated {
[self showToolbar];
[super viewWillAppear:animated];
}
//Remove the toolbar if we are disappearing
- (void)viewWillDisappear:(BOOL)animated {
[self hideToolbar];
[super viewWillDisappear:animated];
}
//Destroy the toolbar
- (void) hideToolbar {
if(toolbar != nil){
//Remove what we added
[toolbar removeFromSuperview];
[toolbar release];
toolbar = nil;
}
}
//Make the toolbar
- (void) showToolbar {
BOOL landscape = (self.interfaceOrientation == UIDeviceOrientationLandscapeLeft || self.interfaceOrientation == UIDeviceOrientationLandscapeRight);
// double check
if (!landscape) {
if (wasLandscape) {
landscape = YES;
wasLandscape = NO;
}
}
//iOS4 accomodation
if(toolbar != nil){
[toolbar removeFromSuperview];
[toolbar release];
toolbar = nil;
}
//Initialize the toolbar -----------------------------------------------------------
toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleDefault;
//Set the toolbar to fit the width of the app.
[toolbar sizeToFit];
//Caclulate the height of the toolbar
CGFloat toolbarHeight = [toolbar frame].size.height;
//Get the bounds of the parent view
CGRect rootViewBounds = self.parentViewController.view.bounds;
//Get the height of the parent view.
CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
//Get the width of the parent view,
CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
//Create a rectangle for the toolbar
CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
//Reposition and resize the receiver
[toolbar setFrame:rectArea];
// create buttons
UIBarButtonItem *bookmarkButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(showBookmarks:)];
//bookmarkButton.TintColor = [UIColor colorWithRed:0.0 green:0.31 blue:0.56 alpha:1.0];
// for spacing
UIBarButtonItem *fixer1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
UIBarButtonItem *fixer2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
UIBarButtonItem *fixer3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
UIBarButtonItem *fixer4 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
if (!landscape) {
fixer1.width = 32;
fixer2.width = 32;
fixer3.width = 32;
fixer4.width = 32;
} else {
fixer1.width = 78;
fixer2.width = 78;
fixer3.width = 78;
fixer4.width = 78;
}
[toolbar setItems:[NSArray arrayWithObjects:fixer4, bookmarkButton, nil]];
//Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// The method hideStatusbar called after 2 seconds
[self showToolbar];
// Do any additional setup after loading the view, typically from a nib.
}
@end
试试这个
[self.navigationController setToolbarHidden:NO animated:NO];
使用 CGRect rootViewBounds = [UIScreen mainScreen].bounds;解决了问题。
我是 iOS 的新手,使用以下代码显示工具栏。 相同的代码适用于其他屏幕。
我已经调试了代码,它进入显示工具栏方法并完成 viewDidLoad 方法,没有任何异常。然后工具栏也没有出现..
但是在UI中没有显示工具栏..请帮我解决这个问题...
下面是实现代码
@implementation HistoryViewController
@synthesize wasLandscape;
- (HistoryViewController *)init {
if (self = [super init]) {
//Set App Delegate
appDelegate = [[UIApplication sharedApplication] delegate];
//Set up an encyclopedia object for me
encBook = [[Encyclopedia alloc] init];
[[appDelegate prefsdb] loadHistoryEncyclopedia:encBook];
}
return self;
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return YES;
}
//Handle appearance
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
//Kill the old, make the new
[self hideToolbar];
[self showToolbar];
}
//Handle appear include Toolbar
- (void)viewWillAppear:(BOOL)animated {
[self showToolbar];
[super viewWillAppear:animated];
}
//Remove the toolbar if we are disappearing
- (void)viewWillDisappear:(BOOL)animated {
[self hideToolbar];
[super viewWillDisappear:animated];
}
//Destroy the toolbar
- (void) hideToolbar {
if(toolbar != nil){
//Remove what we added
[toolbar removeFromSuperview];
[toolbar release];
toolbar = nil;
}
}
//Make the toolbar
- (void) showToolbar {
BOOL landscape = (self.interfaceOrientation == UIDeviceOrientationLandscapeLeft || self.interfaceOrientation == UIDeviceOrientationLandscapeRight);
// double check
if (!landscape) {
if (wasLandscape) {
landscape = YES;
wasLandscape = NO;
}
}
//iOS4 accomodation
if(toolbar != nil){
[toolbar removeFromSuperview];
[toolbar release];
toolbar = nil;
}
//Initialize the toolbar -----------------------------------------------------------
toolbar = [[UIToolbar alloc] init];
toolbar.barStyle = UIBarStyleDefault;
//Set the toolbar to fit the width of the app.
[toolbar sizeToFit];
//Caclulate the height of the toolbar
CGFloat toolbarHeight = [toolbar frame].size.height;
//Get the bounds of the parent view
CGRect rootViewBounds = self.parentViewController.view.bounds;
//Get the height of the parent view.
CGFloat rootViewHeight = CGRectGetHeight(rootViewBounds);
//Get the width of the parent view,
CGFloat rootViewWidth = CGRectGetWidth(rootViewBounds);
//Create a rectangle for the toolbar
CGRect rectArea = CGRectMake(0, rootViewHeight - toolbarHeight, rootViewWidth, toolbarHeight);
//Reposition and resize the receiver
[toolbar setFrame:rectArea];
// create buttons
UIBarButtonItem *bookmarkButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(showBookmarks:)];
//bookmarkButton.TintColor = [UIColor colorWithRed:0.0 green:0.31 blue:0.56 alpha:1.0];
// for spacing
UIBarButtonItem *fixer1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
UIBarButtonItem *fixer2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
UIBarButtonItem *fixer3 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
UIBarButtonItem *fixer4 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
if (!landscape) {
fixer1.width = 32;
fixer2.width = 32;
fixer3.width = 32;
fixer4.width = 32;
} else {
fixer1.width = 78;
fixer2.width = 78;
fixer3.width = 78;
fixer4.width = 78;
}
[toolbar setItems:[NSArray arrayWithObjects:fixer4, bookmarkButton, nil]];
//Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
- (void)viewDidLoad
{
[super viewDidLoad];
// The method hideStatusbar called after 2 seconds
[self showToolbar];
// Do any additional setup after loading the view, typically from a nib.
}
@end
试试这个
[self.navigationController setToolbarHidden:NO animated:NO];
使用 CGRect rootViewBounds = [UIScreen mainScreen].bounds;解决了问题。