How to add Read more/less in Paragraph with Swift 3?

喜夏-厌秋 提交于 2019-12-12 03:58:48

问题


I have a problem with adding Read More/Less text in paragraph. That text needs in iPod but no need for iPad. Please view the attached image below.


The first problem is that before I clicking "Read More" button, there is a space at the top left corner. When I click on Read More button, the label is goes to top and there is no space.

The second problem is that Read More button does not require if the device is iPad because the screen size is big and all the texts are show.
For iPod, it needs to have that button.


Here is my code.

func getLabelHeight(text: String, width: CGFloat, font: UIFont) -> CGFloat {
    let lbl = UILabel(frame: .zero)
    lbl.frame.size.width = width
    lbl.font = font
    lbl.numberOfLines = 0
    lbl.text = text
    lbl.sizeToFit()

    return lbl.frame.size.height
}

@IBAction func btnReadMore(_ sender: Any) {
    if isLabelAtMaxHeight {
        btnReadmore.setTitle("Read more", for: .normal)
        isLabelAtMaxHeight = false
        lblReviewHeight.constant = 93
    }
    else {
        btnReadmore.setTitle("Read less", for: .normal)
        isLabelAtMaxHeight = true
        lblReviewHeight.constant = getLabelHeight(text: lblReview.text!, width: view.bounds.width, font: lblReview.font)

    }

}

How can I check this when Read button is require or not? Please help me. I don't want to add any other library file.


回答1:


You can Identify the device using following code (get it from here)

import UIKit

public extension UIDevice {

    var modelName: String {
        var systemInfo = utsname()
        uname(&systemInfo)
        let machineMirror = Mirror(reflecting: systemInfo.machine)
        let identifier = machineMirror.children.reduce("") { identifier, element in
            guard let value = element.value as? Int8, value != 0 else { return identifier }
            return identifier + String(UnicodeScalar(UInt8(value)))
        }

        switch identifier {
        case "iPod5,1":                                 return "iPod Touch 5"
        case "iPod7,1":                                 return "iPod Touch 6"
        case "iPhone3,1", "iPhone3,2", "iPhone3,3":     return "iPhone 4"
        case "iPhone4,1":                               return "iPhone 4s"
        case "iPhone5,1", "iPhone5,2":                  return "iPhone 5"
        case "iPhone5,3", "iPhone5,4":                  return "iPhone 5c"
        case "iPhone6,1", "iPhone6,2":                  return "iPhone 5s"
        case "iPhone7,2":                               return "iPhone 6"
        case "iPhone7,1":                               return "iPhone 6 Plus"
        case "iPhone8,1":                               return "iPhone 6s"
        case "iPhone8,2":                               return "iPhone 6s Plus"
        case "iPhone9,1", "iPhone9,3":                  return "iPhone 7"
        case "iPhone9,2", "iPhone9,4":                  return "iPhone 7 Plus"
        case "iPhone8,4":                               return "iPhone SE"
        case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
        case "iPad3,1", "iPad3,2", "iPad3,3":           return "iPad 3"
        case "iPad3,4", "iPad3,5", "iPad3,6":           return "iPad 4"
        case "iPad4,1", "iPad4,2", "iPad4,3":           return "iPad Air"
        case "iPad5,3", "iPad5,4":                      return "iPad Air 2"
        case "iPad2,5", "iPad2,6", "iPad2,7":           return "iPad Mini"
        case "iPad4,4", "iPad4,5", "iPad4,6":           return "iPad Mini 2"
        case "iPad4,7", "iPad4,8", "iPad4,9":           return "iPad Mini 3"
        case "iPad5,1", "iPad5,2":                      return "iPad Mini 4"
        case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8":return "iPad Pro"
        case "AppleTV5,3":                              return "Apple TV"
        case "i386", "x86_64":                          return "Simulator"
        default:                                        return identifier
        }
    }

}

// Swift 3 let modelName = UIDevice.current.modelName

Then you can use if,else ..

if(modelName == iPad 3 || modelName == iPad 4 ||modelName == iPad Air){

   // No Read More button

}else{
  // Add Read More button
}


来源:https://stackoverflow.com/questions/42830818/how-to-add-read-more-less-in-paragraph-with-swift-3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!