我正在使用图像视图在导航栏中显示图像.问题是我无法将其正确设置为中间位置,因为有"后退"按钮.我判断了相关问题,发现问题与我之前解决的问题几乎相同,但这次我不知道.

早些时候,我用假条按钮解决了这个问题,所以我try 在右边(和左边)添加一个假条按钮,但没有帮助.

- (void) searchButtonNavBar {


    CGRect imageSizeDummy = CGRectMake(0, 0, 25,25);

    UIButton *dummy = [[UIButton alloc] initWithFrame:imageSizeDummy];

    UIBarButtonItem
    *searchBarButtonDummy =[[UIBarButtonItem alloc] initWithCustomView:dummy];
    self.navigationItem.rightBarButtonItem = searchBarButtonDummy;

}


- (void)setNavBarLogo {

    [self setNeedsStatusBarAppearanceUpdate];
    CGRect myImageS = CGRectMake(0, 0, 44, 44);
    UIImageView *logo = [[UIImageView alloc] initWithFrame:myImageS];
    [logo setImage:[UIImage imageNamed:@"color.png"]];
    logo.contentMode = UIViewContentModeScaleAspectFit;
    self.navigationItem.titleView = logo;
    [[UIBarButtonItem appearance] setTitlePositionAdjustment:UIOffsetMake(0.0f, 0.0f) forBarMetrics:UIBarMetricsDefault];

}

我认为它应该运行良好,因为在这种情况下,titleView在同一侧有条形按钮.有没有任何解释,为什么它可以使用以编程方式创建的条形按钮,但不能使用常见的后退按钮?

推荐答案

只要有足够的空间,UINavigationBar就会自动使其titleView居中.如果标题没有居中,这意味着标题视图太宽,无法居中,如果你设置背景色,如果你的UIImageView,你会看到这正是发生的事情.

标题视图太宽,因为导航栏将使用-sizeThatFits:自动调整标题大小以容纳其内容.这意味着标题视图的大小将始终调整为图像的大小.

两种可能的修复方法:

  1. 你使用的图像太大了.使用大小合适的44x44 pt图像,包括2x和3x版本.

  2. 将UIImageView包装在常规UIView中,以避免调整大小.

例子:

UIImageView* imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.jpeg"]];
imageView.contentMode = UIViewContentModeScaleAspectFit;

UIView* titleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
imageView.frame = titleView.bounds;
[titleView addSubview:imageView];

self.navigationItem.titleView = titleView;

Objective-c相关问答推荐

Objective C 中的 RSA 实现

iphone - 防止uiscrollview通过滚动

使用 AVAudioplayer 在后台播放音乐

KVO - 如何判断对象是否是观察者?

如何创建 NSIndexPath:indexPathWithIndexes:length 所需的索引:

go 掉 UISearchBar 下的 1px 边框

找不到名为ProjectName的目标

如何删除 xcode 5 中的旧配置文件?

在运行时判断 iOS 版本?

关于如何将项目从 UITableView 拖放到 UITableView 的教程

Crashlytics iOS - 记录捕获的异常

iOS:使用设备修饰符加载 xib 文件?

添加自定义 initWith?

alloc 和 allocWithZone: 有什么区别?

将块存储在数组中

UIBezierPath 减go 路径

无法在导航栏中心设置titleView,因为返回按钮

Objective-c 中 SEL 类型的属性

可以在 NSLocalizedString 中使用变量和/或参数吗?

iOS:开源 VoIP/SIP Objective-C 代码