工具栏无法在iOS中显示

时间:2015-05-26 05:52:14

标签: ios uitoolbar uitoolbaritem

我是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

2 个答案:

答案 0 :(得分:0)

试试这个

[self.navigationController setToolbarHidden:NO animated:NO];

答案 1 :(得分:0)

使用CGRect rootViewBounds = [UIScreen mainScreen] .bounds;解决了这个问题。