为不同尺寸的屏幕获取正确的cornerRadius的问题
Posted
技术标签:
【中文标题】为不同尺寸的屏幕获取正确的cornerRadius的问题【英文标题】:Problems with getting right cornerRadius for a different size of the screen 【发布时间】:2015-06-14 20:59:18 【问题描述】:我的申请有问题。 在其中我想要 12 个圆形按钮来选择颜色。我使用 IUButton 来做到这一点。 然后我使用了自动布局约束,所以应用在不同尺寸的 iPhone 屏幕上看起来是一样的。在这里我遇到了一个问题:
当我在 IB“推断”屏幕尺寸的模拟指标中选择时,只有 4 英寸的屏幕有一个圆形按钮。其他更大的 iPhone 尺寸显示的是带圆角的矩形按钮。
看起来按钮已调整大小,但仍使用较小的cornerRadius(4 英寸 iPhone),尽管宽度和高度已更改。
但是当我在模拟指标和模拟器中选择相同的大小时,我得到了想要的结果。
我不知道该怎么办!这是我用来制作圆形按钮的部分代码。我真的希望得到帮助!我真的希望它不是重复的。
换句话说,如果我不选择公制尺寸的视图,我会得到圆角,而不是圆。如果我在模拟器中选择相同尺寸的 iPhone,一切都很好(根据需要)。但是我需要在将指标大小设置为推断时使用圆圈。
这是我正在使用的部分代码:
- (void)viewDidLoad
[super viewDidLoad];
-(void)viewWillLayoutSubviews
[super viewWillLayoutSubviews];
self.isCurrencySelect = NO;
[self createCardTypeList];
self.currencyList = [FinanceUtils currencyCodeListWithAppendedName:NO];
self.pickerContainerView.hidden = YES;
[self.cardTypeButton setTitle:CARDTYPENAME forState:UIControlStateNormal];
[self.currencyButton setTitle:CARDCURRENCYNAME forState:UIControlStateNormal];
self.cardBackgroundView.layer.cornerRadius = 10.0f;
self.cardBackgroundView.layer.borderWidth = 2.0f;
self.cardBackgroundView.layer.borderColor = [UIColor blackColor].CGColor;
self.cardBackgroundView.backgroundColor = [UIColor colorFromHexString:@"#502CA7"];
//change placeholder color
[self.cardNameTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
[self.incomeTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
//set cards value
self.moneySpentValueLabel.text = @"0";
-(void) viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
[self updateButtonsColor];
-(void) updateButtonsColor
NSArray *buttonsColorArray = [UIColor cardsColorArray];
for(UIButton *btn in self.buttonsArray)
btn.layer.borderWidth = 2.0f;
btn.layer.cornerRadius = btn.frame.size.width/2;
btn.layer.masksToBounds = YES;
btn.backgroundColor = [buttonsColorArray objectAtIndex:btn.tag];
【问题讨论】:
您好,有几点建议: 1) 千万不要这样设置值:cornerRadius = 10.0f
,如果您不确定应用此值的 frameSize U 是否等于 (20,20)。你的btn.frame.size.width/2
看起来不错 2) 子视图的框架尚未在viewWillAppear:
中设置在视图呈现到屏幕之前修改 UI 的适当方法是:viewDidLayoutSubviews
谢谢你!全部由您的建议完成!
【参考方案1】:
圆角半径不应该是一个常数,尝试将其更改为按钮高度或类似的东西。
【讨论】:
以上是关于为不同尺寸的屏幕获取正确的cornerRadius的问题的主要内容,如果未能解决你的问题,请参考以下文章