簡體   English   中英

進入視圖時,撰寫UIBarButtonItem稍微改變位置

[英]Compose UIBarButtonItem changes position slightly when coming into view

在導航欄中使用UIBarButtonSystemItemCompose按鈕呈現新視圖時,位置略微偏離,並在視圖進入視圖后進行調整。

進入視圖時,撰寫按鈕會稍微改變位置

我認為這是iOS中的一個錯誤(使用的是8.3版本)。 它只在使用UIBarButtonSystemItemCompose時發生。 其他類型的按鈕(系統,文本或自定義)不會發生這種情況。

復制此錯誤所需的唯一代碼是將此ViewController代碼與將進入視圖的視圖一起使用:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    UIBarButtonItem* composeBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera
                                      target:nil
                                      action:nil];

    [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:YES];
}

@end

我在GitHub上創建了一個存儲庫,只有最少的代碼來重現問題: https//github.com/jvdvleuten/iOSComposeBarButtonItemBug

看起來與此相關: 當UINavigationController以模態方式呈現時,UIBarButtonItems移位 ,除了我的bug只在使用UIBarButtonSystemItemCompose時出現。

有任何想法嗎?

我使用謝爾蓋的答案,但在我的按鈕右邊保留了一個空的空間。 我用一個負間隔物固定它,現在可以很好地工作:

UIBarButtonItem* composeBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
                                              target:nil
                                              action:nil];

UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
                                       initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
                                       target:nil action:nil];
negativeSpacer.width = -6;

UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new];

self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, negativeSpacer, self.composeBarButtonItem];

這絕對是iOS 8.0中的一個錯誤。 這個“跳躍”發生在viewDidAppear之前。 這是解決方法 - 添加另一個'啞'/空項:

UIBarButtonItem* composeBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
                                              target:nil
                                              action:nil];
UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new];
self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, composeBarButtonItem];

一個簡單的解決方法:

let composeButton = UIBarButtonItem(image: UIImage(named: "UIButtonBarCompose"), style: .Plain, target: self, action: "compose:")
self.navigationItem.rightBarButtonItem = composeButton

我們可以使用iOS-Artwork-Extractor獲取圖像'UIButtonBarCompose'。

我認為這是UIBarButtonSystemItemCompose問題。 需要蘋果開發團隊的一些修正。 直到蘋果不解決這個錯誤。 您可以使用以下代碼創建自定義按鈕並將其設置為rightBarButtonItem

UIButton *button =  [UIButton buttonWithType:UIButtonTypeCustom];
    [button setImage:[UIImage imageNamed:@"compose.png"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(buttonAction:)forControlEvents:UIControlEventTouchUpInside];
    [button setFrame:CGRectMake(0, 0, 53, 31)];

    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
    self.navigationItem.rightBarButtonItem = barButton;

-(void)buttonAction:(id)sender{
    NSLog(@"Click");
}

希望這對你有所幫助。

很好的觀察 ,這個問題在viewDidAppear解決了。 你能來看看這個..

- (void)viewDidAppear:(BOOL)animated{    
        [super viewDidAppear:animated];

        UIBarButtonItem* composeBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil];    
        [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:YES];    
}

這可能會幫助你:)

是的,這是IOS8的錯誤。

這是因為跳轉不是導航欄項目位置,其跳躍圖像位置在組合項目內。 此項類型似乎沒有覆蓋推送動畫或類似的東西,例如后退按鈕。

我認為您應該在雷達上創建bug並修復當前的麻煩,只需使用相同的圖像創建自定義UIBarButtonItem。

它可能發生在動畫中

試試這個。 [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:NO];

希望有幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM