Ios 如何在Swift中创建底部对齐标签?

Ios 如何在Swift中创建底部对齐标签?,ios,swift,swift2,interface-builder,Ios,Swift,Swift2,Interface Builder,关于如何在Swift中创建顶部对齐标签,有几个示例。下面是对我有用的一个例子: @IBDesignable class TopAlignedLabel: UILabel { override func drawTextInRect(rect: CGRect) { if let stringText = text { let stringTextAsNSString = stringText as NSString var l

关于如何在Swift中创建顶部对齐标签,有几个示例。下面是对我有用的一个例子:

@IBDesignable class TopAlignedLabel: UILabel {
    override func drawTextInRect(rect: CGRect) {
        if let stringText = text {
            let stringTextAsNSString = stringText as NSString
            var labelStringSize = stringTextAsNSString.boundingRectWithSize(CGSizeMake(CGRectGetWidth(self.frame), CGFloat.max),
                options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: font],
                context: nil).size
            super.drawTextInRect(CGRectMake(0, 0, CGRectGetWidth(self.frame), ceil(labelStringSize.height)))
        } else {
            super.drawTextInRect(rect)
        }
    }
    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        layer.borderWidth = 1
        layer.borderColor = UIColor.blackColor().CGColor
    }
}
我试图修改它来创建一个底部对齐的标签,但很难找到正确的改变。感谢您的帮助

更改此行:

super.drawTextInRect(CGRectMake(0, 0, CGRectGetWidth(self.frame), ceil(labelStringSize.height)))
为此:

super.drawTextInRect(CGRectMake(0, rect.size.height - labelStringSize.height, CGRectGetWidth(self.frame), ceil(labelStringSize.height)))
更改此行:

super.drawTextInRect(CGRectMake(0, 0, CGRectGetWidth(self.frame), ceil(labelStringSize.height)))
为此:

super.drawTextInRect(CGRectMake(0, rect.size.height - labelStringSize.height, CGRectGetWidth(self.frame), ceil(labelStringSize.height)))
更新SWIFT 3.0解决方案,完整代码变为:

import UIKit

@IBDesignable class BottomAlignedLabel: UILabel {
override func drawText(in rect: CGRect) {
    if let stringText = text {
        let stringTextAsNSString = stringText as NSString
        let labelStringSize = stringTextAsNSString.boundingRect(with: CGSize(width: self.frame.width,height: CGFloat.greatestFiniteMagnitude),
                                                                options: NSStringDrawingOptions.usesLineFragmentOrigin,
                                                                attributes: [NSFontAttributeName: font],
                                                                context: nil).size
        super.drawText(in: CGRect(x:0,y: rect.size.height - labelStringSize.height, width: self.frame.width, height: ceil(labelStringSize.height)))
    } else {
        super.drawText(in: rect)
    }
}
override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    layer.borderWidth = 1
    layer.borderColor = UIColor.clear.cgColor
}
}

更新SWIFT 3.0的解决方案,完整代码变为:

import UIKit

@IBDesignable class BottomAlignedLabel: UILabel {
override func drawText(in rect: CGRect) {
    if let stringText = text {
        let stringTextAsNSString = stringText as NSString
        let labelStringSize = stringTextAsNSString.boundingRect(with: CGSize(width: self.frame.width,height: CGFloat.greatestFiniteMagnitude),
                                                                options: NSStringDrawingOptions.usesLineFragmentOrigin,
                                                                attributes: [NSFontAttributeName: font],
                                                                context: nil).size
        super.drawText(in: CGRect(x:0,y: rect.size.height - labelStringSize.height, width: self.frame.width, height: ceil(labelStringSize.height)))
    } else {
        super.drawText(in: rect)
    }
}
override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    layer.borderWidth = 1
    layer.borderColor = UIColor.clear.cgColor
}
}