繁体   English   中英

UIButton initWithFrame:CGRectMake在Xcode 9.3中不起作用

[英]UIButton initWithFrame:CGRectMake not working in Xcode 9.3

将xcode更新为9.3,我在使用可编程按钮时遇到问题

在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];

屏幕Xcode 8 在此处输入图像描述

按钮的图片“ settings.png”以25的高度和25的宽度很好地显示了我。

但是当我使用xcode 9时,不要使用initWithFrame:CGRectMake,它会变得更大。 “按钮图片的大小

屏幕Xcode 9.3 在此处输入图像描述

我怎样才能解决这个问题?

您可以将图片大小调整为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,那么一切都会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM