代码中含有多为swift语法,少部分为objective-c语法
tableView Cell的动态高度
 在自定义cell里面可以在extension写一个方法来获取动态高度1
2
3
4
5
6
7
8extension MyCustomCell {
	func getCellDynamicHeight() -> CGFloat {
	    self.layoutIfNeeded()
	    //todo:添加自己要计算的高度算法,返回一个CGFloat值
	    var aCFloatValue = 0
	    return aCFloatValue
	}
}
 然后在自己的tableView的delegate的以下方法写上如下代码:1
2
3
4
5
6
7
8func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat{
         //从下面这个方法获取当前cell,然后调用cell的getCellDynamicHeight()方法
        var customCell = self.tableView(tableView, cellForRowAtIndexPath: indexPath) as? MyCustomCell
        if let cell = customCell {
            return cell.getCellDynamicHeight()
        }
        return 0
    }
设置textView行间距,文本颜色,字符间距等
 textView根据文本长度动态获取高度(label文本控件同理)
 以下语句利用attributedString来设置行间距,文本颜色,其中textView为需要设置的控件变量1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21var intro = textView.text as NSString
var attributedStr = NSMutableAttributedString(string:intro)
var style = NSMutableParagraphStyle()
attributedStr.addAttribute(	//改变字体
			   NSFontAttributeName, 
			   value: UIFont(name: "FZLanTingHeiS-R-GB", size: 16)!, 
			   range: NSMakeRange(0, intro.length))
attributedStr.addAttribute(	//文本颜色
			   NSForegroundColorAttributeName, 
			   value: UIColor(red: 134/255, green: 135/255, blue: 139/255, alpha: 1), 
			   range: NSMakeRange(0, intro.length))
style.lineSpacing = 5
attributedStr.addAttribute(	//行间距
			   NSParagraphStyleAttributeName,
			   value: style, 
			   range: NSMakeRange(0, attributedStr.length))
attributedStr.addAttribute(	//字符间距
				NSKernAttributeName, 
				value: NSNumber(float: 1), 
				range: NSMakeRange(0, str.length))
textView.attributedText = attributedStr
 然后利用boundingRectWithSize()这个方法来计算包含行间距,字体大小等参数的文本的高度。其中CGSizeMake(width,0)参数表示在width(一般为控件宽度)宽的rect中算出文本的height,而attribute字典中则包含字体大小,字体行间距等计算参数1
2
3
4
5var size = contentText.attributedText.boundingRectWithSize(
						CGSizeMake(UIScreen.mainScreen().bounds.width - 10 - 14 , 0), 
						options: NSStringDrawingOptions.UsesLineFragmentOrigin, 
						context: nil)
var height = size.height //此处获得算出来的文本高度
tableView Header的展开动画
 步骤1.设置tableView.tableHeaderView = customHeaderView;2.在展开后把Frame改变了的Header重新赋值给tableView。
 下面代码是放在customHeaderView中,当点击展开代按钮后1
2
3
4
5
6
7func onclickExpandButton(sender: AnyObject) {    
	UIView.animateWithDuration(0.2, animations: { () -> Void in
	    self.frame = CGRectMake(0, 0, expandWidth, expandHeight)
	    (self.superview as! UITableView).tableHeaderView = self //Frame改变了的Header重新赋值给tableView
	    self.superview?.layoutIfNeeded()
	})      
}
swift的MD5加密
先把这个添加到项目中:
libcommonCrypto.dylib
然后在项目的bridge文件里面:1
#import <CommonCrypto/CommonCrypto.h>
 定义一个尾部,其实就是给字符串增加一些固定的信息1
2//用于md5加密的尾部
let MD5_BASE_TAIL = "tail"
 然后给String类做一个extension1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22extension String {
    var md5_with_tail: String! {
        get{
            var orginStr = self + MD5_BASE_TAIL
            let str = orginStr.cStringUsingEncoding(NSUTF8StringEncoding)
            let strLen = CC_LONG(orginStr.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
            let digestLen = Int(CC_MD5_DIGEST_LENGTH)
            let result = UnsafeMutablePointer<CUnsignedChar>.alloc(digestLen)
            
            CC_MD5(str!, strLen, result)
            
            var hash = NSMutableString()
            for i in 0..<digestLen {
                hash.appendFormat("%02x", result[i])
            }
            
            result.dealloc(digestLen)
            var md5_result = String(format: hash as String)
            return md5_result
        }
    }
}
 最后这样调用就可以得到加密后的字符串了1
2var str : String = "abc"
var str_md5 = str.md5_with_tail
textField内边距
 代码为左边距,同样可以设置右边距1
2
3
4func setTextFieldMargins(textField:UITextField){
        textField.leftView = UIView(frame: CGRectMake(0, 0, 8, textField.frame.size.height))
        textField.leftViewMode = UITextFieldViewMode.Always
}
类似推送的顶部弹出Toast提示框
写一个extension:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76//用于实现顶部弹出的提示
extension UIWindow {
    func showToast(message:String){
        
        var toastView = getToastView(message)
        toastView.transform = CGAffineTransformMakeTranslation(0, -toastView.frame.height)
        self.addSubview(toastView)
        //设置在状态栏之上
        self.windowLevel = UIWindowLevelAlert
        //动画
        UIView.animateWithDuration(
            0.2,
            delay: 0,
            options: .CurveEaseOut,
            animations: { () -> Void in
                toastView.transform = CGAffineTransformIdentity
                
            }) { (finished) -> Void in
                var timer = NSTimer.scheduledTimerWithTimeInterval(
                    1.35,
                    target: self,
                    selector: "toastTimerDidFinish:",
                    userInfo:toastView, repeats: false)
        }
    }
    
    func toastTimerDidFinish(timer:NSTimer){
        self.hideToast(timer.userInfo as! UIView)
    }
    
    func hideToast(toast:UIView){
        UIView.animateWithDuration(
            0.2,
            delay: 0,
            options: .CurveEaseIn,
            animations: { () -> Void in
                toast.transform = CGAffineTransformMakeTranslation(0, -toast.frame.height)
            }) { (finished) -> Void in
                self.windowLevel = UIWindowLevelNormal
                toast.removeFromSuperview()
        }
    }
    
    
    private func getToastView(message:String) -> UIView{
        
        //参数获取或定义
        var screenBounds = UIScreen.mainScreen().bounds
        var topMargin :CGFloat = 4
        var fontSize: CGFloat = 14
        
        //计算文本高度
        var labelHeight = (message as NSString).boundingRectWithSize(
            CGSizeMake(screenBounds.width,0),
            options: NSStringDrawingOptions.UsesLineFragmentOrigin,
            attributes: [NSFontAttributeName : UIFont.systemFontOfSize(fontSize)],
            context: nil).height
        
        //配置label
        var label = UILabel(frame: CGRectMake(0, topMargin, screenBounds.width, labelHeight))
        label.textAlignment = NSTextAlignment.Center
        label.numberOfLines = 0
        label.font = UIFont(name: "FZLanTingHeiS-R-GB", size: fontSize) ?? UIFont.systemFontOfSize(fontSize)
        label.backgroundColor = UIColor.clearColor()
        label.textColor = UIColor.whiteColor()
        label.text = message
        
        //配置toastView
        var toastView = UIView(frame: CGRectMake(0, 0, screenBounds.width, labelHeight + topMargin * 2 ))
        toastView.backgroundColor = UIColor.blackColor()
        toastView.alpha = 0.95
        toastView.addSubview(label)
        
        return toastView
    }
}
用法:1
UIApplication.sharedApplication().keyWindow?.showToast("hello")