iOS---简单的模仿一下朋友圈收起/展开

//
//  ViewController.swift
//  RActionSheet
//
//  Created by ray on 2017/8/15.
//  Copyright © 2017年 ray. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    var label: UILabel!
    var btn: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let label = UILabel.init(frame: CGRect.init(x: 0, y: 100, width: RScreenW, height: 30))
        label.font = UIFont.systemFont(ofSize: 15)
        label.text = "有个大牛说:对待警告要像对待错误一样.有个大牛说:对待警告要像对待错误一样.有个大牛说:对待警告要像对待错误一样."
        label.numberOfLines = 1
        self.view.addSubview(label)
        self.label = label
        let btn = UIButton.init(type: UIButtonType.system)
        btn.frame = CGRect.init(x: 0, y: label.frame.origin.y+label.frame.size.height, width: 50, height: 30)
        btn.setTitle("展开", for: .normal)
        btn.addTarget(self, action: #selector(showMore), for: UIControlEvents.touchUpInside)
        self.btn = btn
        self.view.addSubview(btn)
        
    }

    func showMore() {
        if self.label.numberOfLines == 0 {
            self.label.numberOfLines = 1
            self.label.frame = CGRect.init(x: 0, y: 100, width: RScreenW, height: 30)
            btn.frame.origin = CGPoint.init(x: 0, y: label.frame.origin.y+label.frame.size.height)
            btn.setTitle("展开", for: .normal)
            return
        }
        self.label.numberOfLines = 0
        self.label.frame = CGRect.init(x: 0, y: 100, width: RScreenW, height: (self.label.text?.heightWithConstrainedWidth(width: RScreenW, font: self.label.font))!)
        btn.frame.origin = CGPoint.init(x: 0, y: label.frame.origin.y+label.frame.size.height)
        btn.setTitle("收起", for: .normal)
    }

    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

extension String {
    func heightWithConstrainedWidth(width: CGFloat, font: UIFont) -> CGFloat {
        let constraintRect = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude)
        let boundingBox = self.boundingRect(with: constraintRect, options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil)
        return boundingBox.height
    }
}


你可能感兴趣的:(iOS---简单的模仿一下朋友圈收起/展开)