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 中不可见的主要内容,如果未能解决你的问题,请参考以下文章