• Swift计算文本宽高


     iOS 8 开始可以配合 AutoLayout 自动估算文本的高度,但是当 Cell 比较复杂的时候,还会需要手动去计算。首先声明一个样式

    var TextStyle : [String : NSObject] {  
        get {
    
            let paraStyle = NSMutableParagraphStyle()
    
            paraStyle.minimumLineHeight = 17.3
    
            paraStyle.lineSpacing = 0
    
            paraStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping
    
            paraStyle.paragraphSpacing = 0
    
            paraStyle.paragraphSpacingBefore = 0
    
            return [NSForegroundColorAttributeName: UIColor.blackColor(),
                NSKernAttributeName: CGFloat(0.5),
                NSFontAttributeName: UIFont.systemFontOfSize(15.0),
                NSParagraphStyleAttributeName: paraStyle
            ]
        }
    }

    如果你的文本里含有很多特殊字符,例如颜文字,通过 NSKernAttributeName 设置字间距可以算出更宽松的结果。

    以 UILabel 为例,设置其 attributedText

    label.attributedText = NSAttributedString(string: "Hello World", attributes: TextStyle)) 

    再利用 boundingRectWithSize 这个方法来计算其约束后的高度,传入一个 width 为宽度约束,然后利用我们声明的样式来计算高度。

    func sizeHeightWithText(attrString: NSString,  CGFloat, textAttributes: [NSObject : AnyObject]) -> CGSize {
    
        var rect = attrString.boundingRectWithSize(CGSizeMake(width, CGFloat.max), options: .UsesLineFragmentOrigin | .UsesFontLeading, attributes: textAttributes, context: nil)
    
        return CGSize( rect.width, height: rect.height)
    }

    如果你使用的是 UITextView,那么还需要对 UITextView 做一些处理来去掉他的边距。

    textView.textContainer.lineFragmentPadding = 0  
    textView.textContainerInset = UIEdgeInsetsZero  
     
     
    如有疑问,共同探讨,共同进步。
  • 相关阅读:
    Filebeat Processors对日志数据的处理
    beats直接给es传输日志,自定义索引名
    Elasticsearch:修改fielddata
    Elasticsearch:Elasticsearch中的refresh和flush操作指南
    Elasticsearch创建索引(index)及一个文档(document)
    Elasticsearch:如何对PDF文件进行搜索
    C++ 类构造函数 & 析构函数~
    学习CSS的好地方:CSS Inspiration -- CSS灵感
    css式样里的content
    寄存器与cmp,mov,add,sub,IMUL指令
  • 原文地址:https://www.cnblogs.com/nielsen/p/4831306.html
Copyright © 2020-2023  润新知