2017-09-26 22 views
1

UILabelViewをワードラップに変換するためにInterface Builderを使用しましたが、これはプログラムで行う最初の試みです。UILabelをワードラップに変換できない

label.lineBreakMode = .byWordWrapping 
label.numberOfLines = 0 

私はこれらのプロパティと競合する可能性がある行の高さを設定していますか?

override func layoutSubviews() { 
    super.layoutSubviews() 
    imageViewContent.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height) 
    imageViewContent.loadImageWithURL(imageName!) 

    label.frame = CGRect(x: 0, y: 0, width: frame.size.width-10, height: 21) 
    label.center = imageViewContent.center 
    label.textAlignment = .center 
    label.clipsToBounds = true 
    label.layer.cornerRadius = 10.0 
    label.textColor = .white 
    label.font = UIFont(name: "AvenirNext-DemiBold", size: 15) 
    label.backgroundColor = UIColor.black.withAlphaComponent(0.5) 
    label.lineBreakMode = .byWordWrapping 
    label.numberOfLines = 0 
    label.text = photoName 
} 

答えて

0

私が疑うように、ラベルの高さをハードコードすると、ワードの折り返しができなくなりました。私はlabelHeight変数を作成し、クラスの一番下に関数を追加して、コンテンツ、フォントサイズ、およびlabelWidthに基づいてlabelHeightを計算しました。コードは現在正常に動作しています:

class NTWaterfallViewCell :UICollectionViewCell, NTTansitionWaterfallGridViewProtocol{ 

     var photoName = "" 
     var imageName : String? 
     var labelHeight: CGFloat = 0.0 

     var imageViewContent : UIImageView = UIImageView() 
     var label = UILabel() 

     required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
     } 
     override init(frame: CGRect) { 
      super.init(frame: frame) 
      backgroundColor = UIColor.lightGray 
      contentView.addSubview(imageViewContent) 
      contentView.addSubview(label) 
     } 
     override func layoutSubviews() { 
      super.layoutSubviews() 
      imageViewContent.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height) 
      imageViewContent.loadImageWithURL(imageName!) 

      label.text = photoName 
      labelHeight = heightForText(photoName, width: frame.size.width-10) 
      label.frame = CGRect(x: 0, y: 0, width: frame.size.width-10, height: labelHeight) 

      label.center = imageViewContent.center 
      label.textAlignment = .center 
      label.clipsToBounds = true 
      label.layer.cornerRadius = 10.0 
      label.textColor = .white 
      label.font = UIFont(name: "AvenirNext-DemiBold", size: 15) 
      label.backgroundColor = UIColor.black.withAlphaComponent(0.5) 
      label.lineBreakMode = .byWordWrapping 
      label.numberOfLines = 0 
      } 

     func heightForText(_ text: String, width: CGFloat) -> CGFloat { 
      let font = UIFont(name: "AvenirNext-DemiBold", size: 15) 
      let rect = NSString(string: text).boundingRect(with: CGSize(width: width, height: CGFloat(MAXFLOAT)), options: .usesLineFragmentOrigin, attributes: [NSFontAttributeName: font], context: nil) 
      return ceil(rect.height) 
     } 
} 
関連する問題