繁体   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