Swift基础(十三)UILabel

来源:互联网 发布:oracle sql优化技巧 编辑:程序博客网 时间:2024/05/19 11:37
class RootViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        
        self.view.backgroundColor = UIColor.whiteColor()
        
        // 代码创建UILabel
        // 初始化UILabel
        var nameLabel: UILabel = UILabel(frame: CGRectMake(100, 100, 200, 60));
        // 为了方便看到效果,设置红色背景色
        nameLabel.backgroundColor = UIColor.redColor();
        // 添加到视图中
        self.view.addSubview(nameLabel)
        // 设置tag值,尽量设的大一点,防止与系统中的tag值冲突
        nameLabel.tag = 10001;
        // 通过tag值获取nameLabel
        nameLabel = self.view.viewWithTag(10001) as! UILabel;
        // 设置显示文本
        nameLabel.text = "拉多少空间服务器偶尔聚马上来减肥去哦无机房阿斯兰的减肥群殴为激发呕死了附近澳网IE实例"
        // 设置文本字体
        nameLabel.font = UIFont.systemFontOfSize(18) // 使用系统默认字体,指定字号
        nameLabel.font = UIFont(name: "Helvetica-Bold", size: 18); // 指定字体,指定字号
        // 设置背景色
        nameLabel.backgroundColor = UIColor.redColor() // 系统色值
        nameLabel.backgroundColor = UIColor(red: 125 / 255.0, green: 125 / 255.0, blue: 255 / 255.0, alpha: 1); // 使用RGB来设置颜色,RGB范围0~1,所以255颜色值要除以255.0转换成0~1范围内
        // 设置文本颜色
        nameLabel.textColor = UIColor.blueColor()
        // 设置文本字体阴影延时
        nameLabel.shadowColor = UIColor.yellowColor()
        // 设置阴影方向和大小
        // (0, -1);上阴影
        // (0, 1);下阴影
        // (-1, 0); 左阴影
        // (1, 0);右阴影
        nameLabel.shadowOffset = CGSizeMake(2, 0);
        // 设置文本字体对齐方式,对齐属性有一下几种,默认是左对齐
        // Left: 左对齐
        // Center: 居中
        // Right: 右对齐
        // Justified: 最后一行自然对齐
        // Natural: 默认对齐脚本
        nameLabel.textAlignment = .Right;
        // 设置换行模式,换行模式有以下几种,默认是ByWordWrapping
        // ByWordWrapping // 以空格为界限保留单词
        // ByCharWrapping  保留整个字符
        // ByTruncatingHead  按照“...WXYZ”显示
        // ByTruncatingTail  按照“abcd...”显示
        // ByTruncatingMiddle  按照“ab...yz”显示
        
        // 设置折行方式
        nameLabel.lineBreakMode = .ByTruncatingHead;
        // 是否能与用户交互,默认是false
        nameLabel.userInteractionEnabled = true;
        // 文本是否可变,默认是true
        nameLabel.enabled = false;
        // 文本行数,等于0时没有行数限制
        nameLabel.numberOfLines = 2;
        // 最小字体,行数为1时有效,默认为0.0
        nameLabel.minimumScaleFactor = 10.0;
        // 文本内容自动适应标签大小,默认是false
        nameLabel.adjustsFontSizeToFitWidth = true;
        // 设置文本高亮
        nameLabel.highlighted = true;
        // 设置文本高亮颜色
        nameLabel.highlightedTextColor = UIColor.greenColor()
        
        // 富文本设置
        var attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "1234567890123")
        // 文本0开始5个字符字体HelveticaNeue-Bold,16号
        attributeString.addAttribute(NSFontAttributeName, value: UIFont(name: "HelveticalNeue-Bold", size: 16)!, range: NSMakeRange(0, 3))
        // 设置字体颜色
        attributeString.addAttribute(NSForegroundColorAttributeName, value: UIColor.whiteColor(), range: NSMakeRange(0, 3))
        // 设置文字背景颜色
        attributeString.addAttribute(NSBackgroundColorAttributeName, value: UIColor.greenColor(), range: NSMakeRange(3, 3))
        nameLabel.attributedText = attributeString
        
        // 设置文本基线位置,有以下3种,只有文本行数等于1时有效
        // AlignBaselines: 默认值为文本最上端与label中线对齐
        // AlignCenters:文本中线与label中线对齐
        // None:文本最底端与label中线对齐
        nameLabel.baselineAdjustment = .AlignCenters;
        // UILabel有两个接口专门用来重写,可以自定义label
        /*
         func textRectForBounds(bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect 用来改变UILabel里面文字展示窗口的大小,可以根据文字的多少来计算窗口的大小。
         func drawTextInRect(rect: CGRect) 在绘图环境实现文字的绘制。这个方法里面已经配置好了绘图环境,使用方法需要:1. 直接获得当前绘图上下文。2. 接着更改绘图环境设置。3. 调用super方法来绘制
         上面这两个方法不能用来调用,只适合被UILabel子类重写
         */
        
        // 指定一个固定宽度,然后自适应文本,计算UILabel的高度
        let textString = "撒谎空间和罚款恢复年期无空间划分那次娃还是愤怒插口和租赁费那思考的回复你才来上课的回复你才哦我是坑"
        // 固定宽度,计算自适应的高度
        let size1: CGSize = textString.textSizeWithFont(UIFont.systemFontOfSize(14), constrainedToSize: CGSizeMake(200, CGFloat(MAXFLOAT)))
        print("固定宽度200时,文本的区域为:\(size1)")
        print("固定宽度200时,文本的高度是:\(size1.height)")
        
        // 不限制宽度,自适应文本之后计算UILabel的长度,
        let size2: CGSize = textString.textSizeWithFont(UIFont.systemFontOfSize(14), constrainedToSize: CGSizeZero)
        print("不限制宽度,文本的区域为:\(size2)")
        print("不限制宽度,文本的长度是:\(size2.width)")
    }

}

// 计算文本的高度和宽度
// 下面是封装好的一个NSString的扩展方法,主要用来计算文本的阔度和高度
extension NSString {
    //constrainedToSize如果是一行,就用CGSizeZero,否则用CGSizeMake(你想要的宽度,CGFloat(MAXFLOAT))
    func textSizeWithFont(font: UIFont, constrainedToSize size: CGSize) -> CGSize {
        var textSize: CGSize!
        if CGSizeEqualToSize(size, CGSizeZero) {
            let attributes = NSDictionary(object: font, forKey: NSFontAttributeName);
            textSize = self.sizeWithAttributes(attributes as? [String : AnyObject])
        } else {
            let option = NSStringDrawingOptions.UsesLineFragmentOrigin
            let attributes = NSDictionary(object: font, forKey: NSFontAttributeName);
            let stringRect = self.boundingRectWithSize(size, options: option, attributes: attributes as? [String : AnyObject], context: nil)
            textSize = stringRect.size
            
        }
        return textSize;
    }
}
0 0