为不同尺寸的屏幕获取正确的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的问题的主要内容,如果未能解决你的问题,请参考以下文章

处理屏幕尺寸的正确方法

Android 模拟器没有检测到正确的屏幕尺寸?

不同屏幕尺寸的IOS不同xib

每个角的不同 CornerRadius 到 Border

如何根据不同的屏幕尺寸测量和布局视图

较小尺寸的按钮不是带有 layer.cornerRadius 的圆形