UIButton initWithFrame:CGRectMake 在 Xcode 9.3 中不工作

UIButton initWithFrame:CGRectMake not working in Xcode 9.3

将 xcode 更新到 9.3,我的可编程按钮有问题

in Xcode 8 我用下面的方式得到它并且效果很好

UIButton *btnSettingsButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 25, 25)];
[btnSettingsButton setBackgroundImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
[btnSettingsButton addTarget:self action:@selector(setttingsDashboard:) forControlEvents:UIControlEventTouchUpInside];
[btnSettingsButton setShowsTouchWhenHighlighted:YES];
UIBarButtonItem *btnSettingsItem =[[UIBarButtonItem alloc] initWithCustomView:btnSettingsButton];

屏幕Xcode8 enter image description here

按钮的图像 "settings.png" 高度为 25,宽度为 25,显示效果很好。

但是当我激活 xcode 9 时没有使用 initWithFrame: CGRectMake 并且它变得更大。 "按钮图片的大小

屏幕Xcode9.3 enter image description here

我该如何解决这个问题?

您可以将图片调整为25x25

只需为图片设置内容模式

[[btnSettingsButton imageView] setContentMode: UIViewContentModeScaleAspectFit];
[btnSettingsButton setImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];

添加条形按钮项目是否有问题:-

UIBarButtonItem *settingsButton=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"settings.png"] style:UIBarButtonItemStyleDone target:self action:@selector(setttingsDashboard:)];

通过放置解决

[btnSettingsButton setImage:[UIImage imageNamed:@"settings.png"] forState:UIControlStateNormal];
btnSettingsButton.imageView.contentMode = UIViewContentModeScaleAspectFit;
btnSettingsButton.contentEdgeInsets = UIEdgeInsetsMake(10, 0, 10, -20); 

当您调用 initWithCustomView 时,您正在制作一个自定义栏按钮项目。

  • 在 iOS 10 及之前,它有一个固定大小(如您正确观察到的那样,基于 frame)。

  • 但在 iOS 11 中,此行为完全改变:iOS 11 使用 自动布局 获取自定义栏按钮项目的大小.

因此,您需要提供决定自定义视图大小的内部自动布局约束(例如高度和宽度约束)。如果你给你的按钮一个 25 的高度限制和 25 的宽度限制,一切都会好起来的。