2015-06-29 74 views
3

我做設置customView的框架中的UIBarButtonItem

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)中,而不在右邊的BarButtonItem平常的地方。

注意,使用自動佈局編程設置工作場所放置,但崩潰時我在壓棧另一個控制器...

難道我做錯了什麼?

+0

是的,你不能這樣做。無法指定不同的原點。 – Petar

回答

1

看這個answer

不久,您可以設置邊緣的內側。爲您的uibutton子類重寫alignmentRectInsets並更改頂部和左側的插圖。

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

    return insets; 
} 
0

確定發現了問題..

看來的UIBarButtonItem並不真正關心哪一幀的customView了,因爲它無論如何都會設置它。然而,我的自定義按鈕必須有一個自定義類型,否則它會弄亂框架並將其保留(0,0)在應用程序屏幕上。

self = [UIButton buttonWithType:UIButtonTypeCustom];