UINavigationBar - 如何更改UIBarButtonItem的位置?

时间:2011-10-02 14:18:08

标签: ios xamarin.ios positioning uinavigationbar uibarbuttonitem

我已经将UINavigationBar子类化了。 NavigationBar有两个类型为UIBarButtonItem的按钮。是否可以移动这些按钮?例如,我想向右移动“左按钮”50px,向左移动“右按钮”50px。

LayoutSubViews是移动这些按钮的正确位置吗?

这是NavigationBar类(在MT中创建):

[MonoTouch.Foundation.Register("NavigationBar")]
public class NavigationBar : UINavigationBar
{
    public NavigationBar (IntPtr handle) : base (handle)
    {
        Initialize ();
    }

    [Export ("initWithCoder:")]
    public NavigationBar (NSCoder coder) : base (coder)
    {
        Initialize ();
    }

    public NavigationBar(RectangleF frame, string title) : base (frame)
    {
        InitializeWithStyleAndTitle(title);
    }   

    void Initialize() { }

    void InitializeWithStyleAndTitle(string title)
    {
        //- title
        UINavigationItem navItem = new UINavigationItem(title);

        //- left button
        UIBarButtonItem leftBarButtonItem = new UIBarButtonItem("back", UIBarButtonItemStyle.Plain, this, new Selector("backAction"));
        navItem.LeftBarButtonItem = leftBarButtonItem;

        //- right button
        UIBarButtonItem rightBarButtonItem = new UIBarButtonItem("update", UIBarButtonItemStyle.Plain, this, new Selector("updateAction"));
        navItem.RightBarButtonItem = rightBarButtonItem;    

        //- style 
        BarStyle = UIBarStyle.Black;

        PushNavigationItem(navItem, false);
    }

    //- selectors omitted
}

2 个答案:

答案 0 :(得分:3)

我正在设置自定义按钮的框架并将按钮放在视图中

CustomButton *menu = [[CustomButton alloc] initWithFrame:CGRectMake(7, 3, 35, 35)];
[menu setImage:[UIImage imageNamed:@"sliding_drawer_white_icons"] forState:UIControlStateNormal];
UIView * menuButtonView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 46.0f, 40.0f)];
[menuButtonView addSubview:menu];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonView];

答案 1 :(得分:2)

不,UINavigation有一个特定的行为,只有左右按钮。如果需要定位按钮,则应使用UIToolbar。在两者之间添加垫片以调整按钮的位置。