【问题标题】:Set frame (CGRect) per devices by count of characters - Swift 3通过字符数设置每个设备的帧(CGRect) - Swift 3
【发布时间】:2017-12-25 20:39:02
【问题描述】:

我正在创建标签和字符,我想通过字符设置 UILabel 的框架(X、Y 和宽度)并且 Y 轴是所有设备的常量,那么我如何设置 X 轴的中心并通过计数来控制字符数,每个设备的宽度(50)越来越小??

这是我的代码:

func createTarget(id: Int) {

     listdata = dbHelpr.getDatabase(rowId: id)

     for data in listdata {

         let lengthOfChar : CGFloat = data.ans.length
         let targetSize : CGFloat = self.view.frame.width / 2
         var xAxis : CGFloat = self.view.frame.width / 2 + 55
         let yAxis : CGFloat = self.view.frame.height / 2 + 70
         let targetLabel = UILabel(frame: CGRect(x: xAxis, y: yAxis, width: 50, height: 5))
         xAxis -= 50 + (lengthOfChar)

     }
}

在这张图片中是我的标签,它的位置是 iPhone 7 的 X 轴中心加上模拟器和标签的数量,它是每个字符的计数,所以我想要在所有设备和宽度中的这个位置(X、Y 和宽度)变得越来越小,如果字符数例如为 9,则它必须在 X 轴的中心,宽度必须越来越小,并且在设备的左右两侧留出空间。

我该怎么做?!

谢谢你:)

【问题讨论】:

  • 使用Autolayouts。将标签放入堆栈视图并将堆栈视图设置为centered horizontallycentered vertically

标签: swift uilabel frame cgrect


【解决方案1】:

这是解决方案:

func createTarget(id: Int) {

    listdata = dbHelpr.getDatabase(rowId: id)

    for data in listdata {

        let lengthOfChar : CGFloat = data.ans.length
        let yAxis : CGFloat = self.view.frame.height / 2 + 70

        let width: CGFloat = view.frame.size.width - 40 // frame width
        var targetWidth: CGFloat = (width - (lengthOfChar - 1) * 5) / lengthOfChar

        if targetWidth > 50 {
            targetWidth = 50
        }

        let totalWidth: CGFloat = (targetWidth * lengthOfChar) + ((lengthOfChar - 5) * 5)

        for (indexTar, tar) in data.ans.characters.enumerated() {

            let x : CGFloat = (width / 2) - (totalWidth / 2)
            let xx : CGFloat = (CGFloat(indexTar) * targetWidth) + (CGFloat(indexTar) * 5) + 20
            var xAxis : CGFloat = (x + xx)
            xAxis = width - xAxis

            let targetLabel = UILabel(frame: CGRect(x: xAxis, y: yAxis, width: targetWidth, height: 5))

            targetLabel.backgroundColor = .white
            targetLabel.layer.masksToBounds = true
            targetLabel.layer.cornerRadius = 5
            targetLabel.text = String(describing: tar)
            targetLabel.textAlignment = .center
            targetLabel.textColor = .white
            self.view.addSubview(targetLabel)

        }

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多