UINavigationItems 在 iOS11 中拉伸

UINavigationItems Stretching in iOS11

我正在更新一个应用程序以确保它在 iOS11 中按预期工作。我 运行 遇到的唯一问题是导航栏在 iOS11 中看起来很不一样。元素的位置和大小在版本之间是不一样的。我查看了我的代码,我明确设置了帧大小和边缘插入,为什么这些值在 iOS11 中不受尊重?

//-- Create Right Navigation Item Buttons

// create kabob btn
UIButton *kabobBtn =  [UIButton buttonWithType:UIButtonTypeCustom];
[kabobBtn addTarget:self action:@selector(viewUsersClicked:)forControlEvents:UIControlEventTouchUpInside];
kabobBtn.clipsToBounds = YES;    
[kabobBtn setImage:[UIImage imageNamed:@"KabobMenu2_0071bc_Right.png"]
               forState:UIControlStateNormal];
[kabobBtn.imageView setContentMode:UIViewContentModeScaleAspectFit];
[kabobBtn setFrame:CGRectMake(0, 0, 32, 32)];

// create user profile button
UIButton *userBtn =  [UIButton buttonWithType:UIButtonTypeCustom];    
[userBtn setImage:[UIImage imageNamed:@"people.png"]
        forState:UIControlStateNormal];
[userBtn addTarget:self action:@selector(viewUserProfileClicked:)forControlEvents:UIControlEventTouchUpInside];
[userBtn setFrame:CGRectMake(0, 0, 38, 38)];
userBtn.clipsToBounds = YES;

[userBtn.layer setCornerRadius:(38/2)];
[userBtn.layer setMasksToBounds:YES];
[userBtn.layer setBorderColor:[[UIColor blackColor]CGColor]];
[userBtn.layer setBorderWidth:1];


self.userPictureURL = [defaults objectForKey:@"userPicture"];

[userBtn setImage:[UIImage imageNamed:@"defaultUserImage.png"] forState:UIControlStateNormal];
[userBtn setContentMode:UIViewContentModeScaleAspectFill];
[userBtn setBackgroundColor:[UIColor clearColor]];

// add buttons to bar button items
UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:kabobBtn];
UIBarButtonItem *barButton2 = [[UIBarButtonItem alloc] initWithCustomView:userBtn];

// add bar button items to right bar button item array
self.navigationItem.rightBarButtonItems = @[barButton,barButton2];

//-- Create Left Hamburger Button
UIButton *customOpen = [UIButton buttonWithType:UIButtonTypeCustom];
[customOpen setFrame:CGRectMake(0, 0, 30, 44)];
[customOpen setImage:[UIImage imageNamed:@"hamburger.png"] forState:UIControlStateNormal];
[customOpen setImageEdgeInsets:UIEdgeInsetsMake(10, -5, 16, 10)];
UIBarButtonItem *openItem = [[UIBarButtonItem alloc] initWithCustomView:customOpen];

if(self.showHamburger){
    self.navigationItem.leftBarButtonItem = openItem;

}else{
    self.navigationItem.leftBarButtonItem = nil;

}

显然 iOS 11 对导航栏按钮使用了自动布局。使用自动布局约束来设置按钮的宽度和高度。

[userBtn.widthAnchor constraintEqualToConstant:38.f].active = YES;
[userBtn.heightAnchor constraintEqualToConstant:38.f].active = YES;

这应该可以解决拉伸问题。

感谢