在UIBarButtonItem中设置customView的框架

时间:2015-06-29 08:30:10

标签: ios uinavigationbar customization

我在做

mapButton *topMapButton = [[mapButton alloc] init];
    [topMapButton setSize:CGSizeMake(70, 30)];
    topMapButton.frame = CGRectMake(0, STATUS_HEIGHT +7, 70, 30);

    UIBarButtonItem *barIcon = [[UIBarButtonItem alloc] initWithCustomView: topMapButton];
    [topMapButton addTarget:self action:@selector(openMap:) forControlEvents:UIControlEventTouchUpInside];
        self.navigationItem.rightBarButtonItem = barIcon;

其中mapButton是一个UIButton子类,具有预设外观,没有别的

无论我为topMapButton设置了什么帧,它都会保持在(0,0)而不是在通常位置的rightBarButtonItem中。

请注意,以编程方式使用autolayout设置放置的位置,但是当我在堆栈中推送另一个控制器时崩溃...

我做错了吗?

2 个答案:

答案 0 :(得分:1)

看看这个answer

很快,您可以设置边缘插入。覆盖你的uibutton子类的alignmentRectInsets并更改top和left insets。

- (UIEdgeInsets)alignmentRectInsets {
    UIEdgeInsets insets =  UIEdgeInsetsMake(top_value, left_value, bottom_value, right_value);

    return insets;
}

答案 1 :(得分:0)

确定发现了问题..

似乎UIBarButtonItem并不关心customView的框架,因为无论如何它都会设置它。

但是,我的自定义按钮必须有一个自定义类型,否则会弄乱框架并保留应用程序屏幕的(0,0)。

$ ./a.out 0x80000000
ffffffff80000000
$ ./a.out 0x40000000
40000000