Установите правильные размеры подпредставлений после масштабирования родительского вида - PullRequest
1 голос
/ 02 февраля 2020

Я создаю программно UIView, который масштабируется и переводится в центр моего обзора. Затем я добавляю подпредставления (UILabel) к этому представлению программно, и проблема, с которой я столкнулся, заключается в том, что текст для UILabel растянут и труден для чтения. Я попытался установить autoresizeSubviews = false, однако это не имело никакого эффекта. Я также попытался установить количество строк, но это не оказало никакого влияния. Я хотел знать, было ли возможное решение этой проблемы, которое, возможно, я пропускаю. Ниже приведен мой код ...

Здесь я создаю экземпляр каждого объекта пользовательского интерфейса, который будет использоваться при просмотре, включая само представление

//create lazy vars for UIView that is instantiated until it is initialized
 lazy var enlargedView: UIView = {
   let view = UIView()
   view.backgroundColor = UIColor.white
   view.layer.cornerRadius = 12.0
   view.clipsToBounds = true
    return view
  }()

 lazy var profileImageView: UIImageView = {
let imageView = UIImageView()
    imageView.frame = CGRect(x: self.enlargedView.center.x, y: self.enlargedView.bounds.origin.y + 20.0, width: self.enlargedView.bounds.width * 0.4, height: self.enlargedView.bounds.width * 0.4)
imageView.layer.cornerRadius = imageView.frame.width / 2
imageView.clipsToBounds = true
imageView.layer.borderColor = UIColor.black.cgColor
imageView.layer.borderWidth = 1.0
imageView.contentMode = .scaleAspectFit
imageView.translatesAutoresizingMaskIntoConstraints = false
  return imageView
}()
 lazy var usernameLabel: UILabel = {
   let label = UILabel()
   label.numberOfLines = 0
   label.lineBreakMode = .byWordWrapping
   label.textColor = UIColor.black
   let font = UIFont(name: Constants.Fonts.GILL_SANS_SEMIBOLD, size: 8.0)
   let fontMetrics = UIFontMetrics(forTextStyle: .body)
   label.font = fontMetrics.scaledFont(for: font!)
   label.textAlignment = .center
   //label.sizeToFit()
   label.translatesAutoresizingMaskIntoConstraints = false
    return label
      } ()

   lazy var userDataLabel: UILabel = {
    let label = UILabel()
    //creates implicit height for label
     label.numberOfLines = 0
     label.lineBreakMode = .byWordWrapping
    label.textColor = UIColor.black
    let font = UIFont(name: Constants.Fonts.GILL_SANS, size: 10.0)
     let fontMetrics = UIFontMetrics(forTextStyle: .body)
     label.font = fontMetrics.scaledFont(for: font!)
     label.textAlignment = .center
     label.sizeToFit()
     label.translatesAutoresizingMaskIntoConstraints = false
     return label
     } ()  

Далее я создаю анимацию для масштабирования и преобразования вида, как только ячейка collectionView нажата

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SearchCell", for: indexPath) as! SearchCell
    let currentFrame = cell.frame
    let selectedUser = userNameArr[indexPath.row]
    enlargedView.frame = currentFrame

    let backgroundView = UIView(frame: self.view.bounds)
    backgroundView.backgroundColor = UIColor.black.withAlphaComponent(0.5)

    UIView.animate(withDuration: 0.3, delay: 0.0, options: .curveEaseOut, animations: {
        self.view.addSubview(self.enlargedView)

        //translate view to center of screen
        self.enlargedView.center = CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY)
        //while view is being translated background subview should be inserted
        self.view.insertSubview(backgroundView, belowSubview: self.enlargedView)
        self.enlargedView.transform = CGAffineTransform(scaleX: 2.5, y: 2.5)

    }) { (viewWasEnlarged) in

        if viewWasEnlarged {

            if let profile = selectedUser.user_photo_url {
                self.profileImageView.kf.setImage(with: URL(string:Constants.Server.MEDIA_URL + profile))
            } else {
                self.profileImageView.image = UIImage(named: "user_icon")
            }
            self.enlargedView.addSubview(self.profileImageView)
            self.profileImageView.snp.makeConstraints { (make) in
                make.centerX.equalToSuperview()
                make.top.equalTo(self.enlargedView.snp.top).offset(20.0)
                make.width.equalTo(self.enlargedView.snp.width).multipliedBy(0.4)
                make.height.equalTo(self.enlargedView.snp.width).multipliedBy(0.4)
            }
        //USERNAME label
        self.usernameLabel.text = selectedUser.user_name!
        self.enlargedView.addSubview(self.usernameLabel)

        self.usernameLabel.snp.makeConstraints { (make) in
            make.centerX.equalToSuperview()
            make.width.equalTo(self.enlargedView.snp.width).multipliedBy(0.9)
            make.top.equalTo(self.profileImageView.snp.bottom).offset(5.0)
        }
        //reset enlarged view back to original value
        self.usernameLabel.transform = CGAffineTransform.identity
        //USER DATA label
            var userAge = ""
            var userRelationshipStatus = ""

            if let userYear = selectedUser.user_birthday {
                let yr = self.calendar.dateComponents([.year], from: userYear).year
                 userAge = "\(yr!)"
               }

             if let status = selectedUser.user_stats {
                 userRelationshipStatus = status
               }

            self.userDataLabel.text = userAge + " | " + userRelationshipStatus
            self.enlargedView.addSubview(self.userDataLabel)
            self.userDataLabel.snp.makeConstraints { (make) in
                make.centerX.equalToSuperview()
                make.width.equalTo(self.enlargedView.snp.width).multipliedBy(0.2)
                make.top.equalTo(self.usernameLabel.snp.bottom).offset(3.0)
            }
            //create label to show HUB as well
            //create bio
            //show Path??

        }
    }

Изображение не изменяется, однако сам текст не отображается правильно

...