在iOS 11的导航栏中约束UIBarButtonItem的大小

我尝试在导航栏中使用不同大小的图像设置UIBarButtonItem。 所以我创build一个基于UIBarButtonItem的自定义视图,并设置自定义视图的框架来约束UIBarButtonItem的宽度。 在将软件更新到iOS 11之前,它一直在运行良好。设置自定义视图的框架来约束UIBarButtonItem的宽度在iOS 11上似乎不再有用。

我用120 * 120的图像defaultImage

 UIButton *leftCustomButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; [leftCustomButton setImage:[UIImage imageNamed:@"defaultImage"] forState:UIControlStateNormal]; UIBarButtonItem * leftButtonItem =[[UIBarButtonItem alloc] initWithCustomView:leftCustomButton]; self.navigationItem.leftBarButtonItems = @[self.headerIconItem]; 

在iOS10,iOS9上,leftBarButtonItem的图像没有拉伸。 它显示如下:

在iOS 10上显示

但是leftBarButtonItem的图像在iOS11上已经被拉伸了。 它显示在下面的图片中。

在iOS 11上显示

是否有一些方法来限制iOS 11上的导航栏中的UIBarButtonItem的宽度?

从iOS 11开始, UIBarButtonItem现在是使用自动布局引擎进行布置的,在你的情况下,当你定位iOS 11时,你应该这样说:

 UIButton *leftCustomButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; [leftCustomButton.widthAnchor constraintEqualToConstant:35].active = YES; [leftCustomButton.heightAnchor constraintEqualToConstant:35].active = YES; [leftCustomButton setImage:[UIImage imageNamed:@"defaultImage"] forState:UIControlStateNormal]; UIBarButtonItem * leftButtonItem =[[UIBarButtonItem alloc] initWithCustomView:leftCustomButton]; self.navigationItem.leftBarButtonItems = @[self.headerIconItem]; 

有关更多信息,您应该看到更新您的应用程序的iOS 11 WWDC 2017会议。