我在做
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设置放置的位置,但是当我在堆栈中推送另一个控制器时崩溃...
我做错了吗?
答案 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