UIToolbar尺寸精确

时间:2011-12-12 08:13:07

标签: ios height uinavigationbar toolbar uitoolbar

我正在尝试借助工具栏自定义我的NavigationBar。 我已按照以下方式以编程方式实现它:

UIToolbar* tools = [[UIToolbar alloc] initWithFrame: CGRectMake(0, 0, 100, 44.01)];

然后我将它添加到我的NavigationBar中。问题是我对边界有这种丑陋的影响:

navigationbar + toolbar

我试图更改y和高度值,但没有结果。 你有任何想法可以避免这种情况吗?

提前致谢,yassa

3 个答案:

答案 0 :(得分:2)

我不会这样做。 您可以通过向navigationItem.rightBarButtonItem添加带有2个按钮的视图来实现相同的效果。这很简单:

// view that will hold the buttons
UIView* container = [[UIView alloc] init];

// create 1 button and add it to the container
UIButton* button = [[UIButton alloc] init........];
[container addSubview:button];


//create 2 button and add it to the container
button = [[UIButton alloc] init.........];
[container addSubview:button];


// now create a Bar button item
UIBarButtonItem* barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:container];

// set the nav bar's right button item
self.navigationItem.rightBarButtonItem = barButtonItem;

答案 1 :(得分:2)

我部分同意之前的回答和评论。 您建议的解决方案适用于自定义按钮。但是,如果我想实现标准的编辑按钮怎么办? 访问标准按钮/图标是通过UIBarButtonItem类,而不是UIButton。而且你不能将UIBarButtonItem对象添加到UIView。

经过网上的多项研究,我发现完全符合我要求的解决方案。必须按以下方式创建工具栏:

UIToolbar *tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 95.0f, 44.01f)];
tools.tintColor = self.navigationController.navigationBar.tintColor;
tools.barStyle = -1;

这就是结果:

my toolbar

希望它有所帮助! yassa

答案 2 :(得分:0)

或者你可以这样做。 只需像这样创建UIToolbar的新子类<​​/ p>

   @interface MyToolbar : UIToolbar

    @end

    @implementation MyToolbar

    - (id)initWithFrame:(CGRect)frame {

        if ((self = [super initWithFrame:frame])) {

            self.opaque = NO;
            self.backgroundColor = [UIColor clearColor];
            self.clearsContextBeforeDrawing = YES;      
        }
        return self;
    }


    - (void)drawRect:(CGRect)rect {
        // do nothing
    }

    - (void)dealloc {
        [super dealloc];
    }

@end

并将其用作普通的UIToolbar。我不知道为什么,但它只是有效。