Swift 3 - 每台设备设置X-Y轴UILabel

时间:2017-08-03 13:51:24

标签: ios iphone swift uilabel cgrect

我有标签并且我给出了XY轴的值,但是我的值没有将标签放在每个设备的中心,如果设备是大的设置宽度大小50,我写的宽度大小的方法,但是这个方法没有只需使用iPhone 6 + / 6S + / 7 +即可使用iPhone SE,5S / 5,6 / 6s / 7!例如像这样

enter image description here

那么什么是错的,我应该添加什么?

let lengthOfChar : CGFloat = data.ans.length // Characters form SQLite database
let yAxis : CGFloat = self.view.frame.height / 3 * 1.8
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)
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

3 个答案:

答案 0 :(得分:0)

我正在使用帮助程序枚举,允许为某些iPhone执行自定义操作。设置下面的枚举用法

使用以下代码添加新课程

enum DeviceType: Int {
  case iPhone4 = 1
  case iPhone5
  case iPhone6
  case iPhone6Plus
  case iPad

  init(userInterfaceIdiom: UIUserInterfaceIdiom, screenHeight: CGFloat) {
    switch (userInterfaceIdiom, screenHeight) {
    case (.phone, 0..<568.0):
        self = .iPhone4
    case (.phone, 568.0..<667.0):
        self = .iPhone5
    case (.phone, 667.0..<736.0):
        self = .iPhone6
    case (.phone, 736.0..<CGFloat.infinity):
        self = .iPhone6Plus
    case (.pad, _):
        self = .iPad
    default:
        self = .iPhone6
    }
  }

  func isSameOrSmaller(than deviceType: DeviceType) -> Bool {
    return self.rawValue <= deviceType.rawValue
  }
}

<强>用法

if UIDevice.current.type().isSameOrSmaller(than: .iPhone5) {
    // Do what you need
}

答案 1 :(得分:0)

在代码中使用自动布局

label.translatesAutoresizingMaskIntoConstraints = false

label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
label.heightAnchor.constraint(equalToConstant: 40).isActive = true
label.widthAnchor.constraint(equalToConstant: 150).isActive = true
label.topAnchor.constraint(equalTo: self.purpleBox.bottomAnchor, constant: 20).isActive = true

你可以用它做任何你想做的事。这非常强大。

您可以使用的其他一些锚点

// centerYAnchor
// leftAnchor
// rightAnchor
// bottomAnchor

进一步阅读:Working with Layout anchors

答案 2 :(得分:-1)

我解决了我的问题,这是一个解决方案:

postfix operator %

postfix func % (percentage: CGFloat) -> CGFloat {
    return (CGFloat(percentage) / 100)
}

let yAxis : CGFloat = (self.view.frame.height) * 60%

if lengthOfChar >= 8 {

   targetWidth = 40

} else { 

   targetWidth = 50 

}