UILabel 在圆形自定义 UIView 中不可见

Posted

技术标签:

【中文标题】UILabel 在圆形自定义 UIView 中不可见【英文标题】:UILabel not visible in circular custom UIView 【发布时间】:2015-07-27 08:48:45 【问题描述】:

我的视图层次结构如下所示,我有一个 UITableViewController -> 静态单元格 -> UITableViewCell -> 自定义 UIView -> UILabel

我的目标是显示圆形个人资料图像视图,最后一个视图显示剩余图像数量的计数。

这就是我创建一个完美的圆形视图的方法

private func getCircularViewForPoint(point: CGPoint) -> UIView 
    var circularView: UIView = UIView(frame: CGRect(x: point.x, y: point.y, width: 30, height: 30))
    circularView.layer.cornerRadius = 15
    circularView.layer.masksToBounds = true

    circularView.backgroundColor = UIColor.blueColor()

    return circularView

所以现在我想在里面创建一个带有 UILabel 的视图

private func getCircularCountViewForPoint(point: CGPoint, maxAmount: Int) -> UIView 
    var circularView = self.getCircularViewForPoint(point)
    circularView.backgroundColor = UIColor.brownColor()

    var label: UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
    label.center = circularView.center
    label.text = "XY"
    label.font = UIFont.systemFontOfSize(10.0)
    label.textAlignment = NSTextAlignment.Center

//        self.addSubview(label)  // This works but label is now behind circularView of course

    circularView.addSubview(label)

    return circularView

结果看起来像这样,棕色视图中没有 UILabel。

circularView 的框架: <UIView: 0x7feb28fd9d50; frame = (295 24.75; 30 30); clipsToBounds = YES; ...

label 的框架: <UILabel: 0x7feb28ce33b0; frame = (295 24.75; 30 30); userInteractionEnabled = NO; ...

奇怪的是,如果我把这段代码放到操场上,它会像预期的那样工作,并且标签是可见的。

为了完整起见,我这样称呼这两个函数

for var i = 0; i < maxAmount-1; i++ 
    self.addSubview(self.getCircularViewForPoint(CGPoint(x: xPos, y: yPos)))
    xPos += size+offset


// add count view
var countView = self.getCircularCountViewForPoint(CGPoint(x: xPos, y: yPos), maxAmount: maxAmount)
self.addSubview(countView)

【问题讨论】:

移除 label.center = circularView.center 成功了,非常感谢。知道为什么会导致这个问题吗? circularView.center 给出了 circularView 相对于其 superView 的中心点,当您设置 labe.center 时,它的中心点移动到该点 我会说这应该没有错,因为您看到框架是相同的,因此它们的中心点也应该是相同的。 否,因为您将标签添加到圆形视图而不是主视图 【参考方案1】:

因为您的目标是显示个人资料图片,所以我会尝试用图片替换棕色背景:

    circularView.backgroundColor = UIColor(patternImage: UIImage(named: "profilepicturename.png")!)

对不起,我帮不上标签的事情

【讨论】:

是的,当然,这只是为了测试目的,我当然要用UIImageView 替换UIView

以上是关于UILabel 在圆形自定义 UIView 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要在自定义 UIView 中使用单独的 UILabel 才能在 UITableViewCell 中有单独的 UILabel 行?

使用 UILabel iOS 自定义 UIView

UIImageView 未调整为圆形,UILabel 未在 StackView 和自定义集合单元中调整大小

如何在 touchesBegan 上的自定义 UIView 中调整 UILabel 位置?

为啥这个自定义 UIView 代码不显示 UILabel 的?

更改自定义 UIView 的 UILabel 文本不起作用