我在设置 View 的拐角半径时遇到问题,因为自从Xcode更新为8以来, View 的帧在大多数情况下都设置为1000x1000而不是适当的大小。

有一个类似的问题here,但我想补充一点信息,希望有人找到答案或解决方法。

在其中一种情况下,我有一个表格 View 单元格,该单元格具有在 Storyboard 中创建的 ImageView 。其宽度和高度在有约束的情况下设置为常数(至95)。拐角半径是在layoutSubviews中设置的,该代码目前已经可以使用:

- (void)layoutSubviews
{
    [super layoutSubviews];
    self.myImageView.layer.cornerRadius = self.myImageView.frame.size.width/2.0f;
}

因此,我反复尝试了一下,如果在设置图像(从远程服务器检索图像)后尝试触发布局,情况似乎会更好一些。
self.myImageView.image = image;
[self.myImageView setNeedsLayout];
[self setNeedsLayout];
[self layoutIfNeeded];

仍然在大多数情况下不起作用。现在有趣的部分是:

我在选项卡栏上有这种 View Controller 的情况,当我用目标 View Controller 按选项卡时,将立即调用布局 subview (来自UIApplicationMain),其中 ImageView 的大小为1000x1000,但是一旦图像设置,然后调用布局方法,然后以95x95的正确 ImageView 大小再次调用布局 subview ,从而获得正确的结果。

第二种情况是推送相同类型的 View Controller ,其中首先不调用布局,只有在设置图像并强制布局后才进行调用。结果再次具有大小为1000x1000的 ImageView ,将拐角半径设置为500,并且图像不可见。

那么,有解决这些奇怪帧值的好方法吗?我在多个 View Controller ,表 View 单元格上存在相同的问题。在更新之前,所有这些都可以正常工作。

有谁知道这个问题的根源是什么?是从 Storyboard 中进行的,还是某种设置的迁移,还是此版本的软件引入了一些布局错误?

我现在还添加了来自 Nib 的唤醒:
- (void)awakeFromNib
{
    [super awakeFromNib];

    [self.myImageView setNeedsLayout];
    [self setNeedsLayout];
    [self layoutIfNeeded];
}

现在,在我的情况下,这迫使布局至少发生两次,而第二次框架是正确的。但这仍然离答案还很远,这太糟糕了,我想对此进行狂热,因为我需要在所有单元格上为每个 ImageView 和按钮使用它。

最佳答案

您能将您的方法更新为

- (void)layoutSubviews
{
    [super layoutSubviews];
    self.myImageView.layer.cornerRadius = self.myImageView.frame.size.width/2.0f;
    self.myImageView.clipsToBounds = TRUE;
}

并尝试一下。

在我的一种情况下,由于我错过了设置clipsToBounds = TRUE;的设置,因此没有成功。

关于ios - 如何使用Xcode 8将UIView用作具有圆角半径的圆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39702895/

10-14 20:41
查看更多