Change position of UIBarButtonItem in UINavigationBar

后端 未结 20 1579
一个人的身影
一个人的身影 2020-11-27 10:31

How can I change the position of a UIBarButtonItem in a UINavigationBar? I would like my button to be about 5px higher than its normal position.

20条回答
  •  天命终不由人
    2020-11-27 11:18

    This code creates a back button for UINavigationBar with image background and custom position. The trick is to create an intermediate view and modify its bounds.

    Swift 5

    let menuBtn = UIButton(type: .custom)
    let backBtnImage = UIImage(named: "menu")
    
    menuBtn.setBackgroundImage(backBtnImage, for: .normal)
    menuBtn.addTarget(self, action: #selector(showMenuTapped), for: .touchUpInside)
    menuBtn.frame = CGRect(x: 0, y: 0, width: 45, height: 45)
    
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 45, height: 45))
    view.bounds = view.bounds.offsetBy(dx: 10, dy: 3)
    view.addSubview(menuBtn)
    let backButton = UIBarButtonItem(customView: view)
    
    navigationItem.leftBarButtonItem = backButton
    

    Objective C

    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    UIImage *backBtnImage = [UIImage imageNamed:@"btn-back"];
    UIImage *backBtnImagePressed = [UIImage imageNamed:@"btn-back-pressed"];
    [backBtn setBackgroundImage:backBtnImage forState:UIControlStateNormal];
    [backBtn setBackgroundImage:backBtnImagePressed forState:UIControlStateHighlighted];
    [backBtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
    backBtn.frame = CGRectMake(0, 0, 63, 33);
    UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 63, 33)];
    backButtonView.bounds = CGRectOffset(backButtonView.bounds, -14, -7);
    [backButtonView addSubview:backBtn];
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
    self.navigationItem.leftBarButtonItem = backButton;
    

提交回复
热议问题