前提: leftBarButtonItem无法通过frame的x设置item的位置
目的:让UINavigationBar的左边,右边item 自定义偏移(下面以leftBarButtonItem为例)
- 一般leftBarButtonItem用UIButton自定义 都会出现图片过右的情况,我们想按钮内容(文字,图片)做偏移
- leftBarButtonItem用UIButton自定义 可通过UIButton中的contentEdgeInsets属性,去实现按钮内容偏移
- 或者通过UIButton中的contentHorizontalAlignment属性实现按钮内容的偏移
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setTitle:@"返回" forState:UIControlStateNormal];
button.size = CGSizeMake(70, 30);
// 让按钮内部的所有内容左对齐
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
// 让按钮的内容往左边偏移10
button.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
// 修改导航栏左边的item
navVC.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
- leftBarButtonItem中的CustomView, 如果设置成UIView, 则就没有contentEdgeInsets和contentHorizontalAlignment属性去修改的位置
- 面对这种情况,苹果给我们提供了UIBarButtonSystemItemFixedSpace这种item类型来处理.自定义View位置偏移
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSpacer.width = -15; //偏移距离 -向左偏移, +向右偏移
self.navigationItem.leftBarButtonItems = @[negativeSpacer, [[UIBarButtonItem alloc] initWithCustomView:button]];
网友评论