Compose 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
看起来与此相关:UIBarButtonItems shift position when UINavigationController is presented modally,除了我的错误仅在使用 UIBarButtonSystemItemCompose 时出现。
有什么想法吗?
动画可能会发生
试试这个。
[self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:NO];
希望有所帮助:)
是的,这是 IOS8 错误。
发生这种情况是因为跳转不是导航栏项目位置,而是跳转图像在组合项目中的位置。这个项目类型似乎没有覆盖推送动画或类似的东西,例如后退按钮。
我认为您应该在雷达上创建错误并解决当前的问题,只需创建具有相同图像的自定义 UIBarButtonItem。
这绝对是 iOS 8.0 中的错误。此 'jump' 发生在 viewDidAppear
之前。这是解决方法 - 添加另一个 'dumb'/空项:
UIBarButtonItem* composeBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
target:nil
action:nil];
UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new];
self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, composeBarButtonItem];
我认为这是 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];
}
这可能对您有所帮助:)
我使用了 Sergey 的回答,但在我的按钮右侧保留了一个空白 space。我用负 spacer 修复了这个问题,现在效果很好:
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];
一个简单的解决方法:
let composeButton = UIBarButtonItem(image: UIImage(named: "UIButtonBarCompose"), style: .Plain, target: self, action: "compose:")
self.navigationItem.rightBarButtonItem = composeButton
我们可以用 iOS-Artwork-Extractor.
得到图像 'UIButtonBarCompose'
在导航栏中显示带有 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
看起来与此相关:UIBarButtonItems shift position when UINavigationController is presented modally,除了我的错误仅在使用 UIBarButtonSystemItemCompose 时出现。
有什么想法吗?
动画可能会发生
试试这个。 [self.navigationItem setRightBarButtonItem:composeBarButtonItem animated:NO];
希望有所帮助:)
是的,这是 IOS8 错误。
发生这种情况是因为跳转不是导航栏项目位置,而是跳转图像在组合项目中的位置。这个项目类型似乎没有覆盖推送动画或类似的东西,例如后退按钮。
我认为您应该在雷达上创建错误并解决当前的问题,只需创建具有相同图像的自定义 UIBarButtonItem。
这绝对是 iOS 8.0 中的错误。此 'jump' 发生在 viewDidAppear
之前。这是解决方法 - 添加另一个 'dumb'/空项:
UIBarButtonItem* composeBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose
target:nil
action:nil];
UIBarButtonItem *dumbBarButtonItem = [UIBarButtonItem new];
self.navigationItem.rightBarButtonItems = @[dumbBarButtonItem, composeBarButtonItem];
我认为这是 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];
}
这可能对您有所帮助:)
我使用了 Sergey 的回答,但在我的按钮右侧保留了一个空白 space。我用负 spacer 修复了这个问题,现在效果很好:
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];
一个简单的解决方法:
let composeButton = UIBarButtonItem(image: UIImage(named: "UIButtonBarCompose"), style: .Plain, target: self, action: "compose:")
self.navigationItem.rightBarButtonItem = composeButton
我们可以用 iOS-Artwork-Extractor.
得到图像 'UIButtonBarCompose'