2016-12-18 9 views
0

私はprofileviewのヘッダーを持つtableviewを持っています。UIImageViewのサイズがテーブルビュー内に設定されたフレームよりも大きい

私はavatarImageという名前の画像を持っています。

var avatarImage:UIImageView = { 
    let iv = UIImageView() 
    iv.translatesAutoresizingMaskIntoConstraints = false 
    iv.backgroundColor = .blue 
    iv.layer.cornerRadius = 10.0 
    iv.layer.borderColor = UIColor.white.cgColor 
    iv.layer.borderWidth = 3.0 
    iv.contentMode = UIViewContentMode.scaleAspectFit 
    return iv 
}() 

override func viewWillLayoutSubviews() { 
    setupViews() 
    setupProfileView() 

    if let imageURL = selectedStylist?.imageUrl { 
     avatarImage.loadImageUsingCacheWithUrlString(imageURL) 
    } 
} 

Iこれは代わりに画像である80×80及びフィッティングのURLからImageViewの

let imageCache = NSCache<NSString, UIImage>() 

extension UIImageView { 

func loadImageUsingCacheWithUrlString(_ urlString: String) { 

    self.image = nil 

    //check cache for image first 
    if let cachedImage = imageCache.object(forKey: urlString as NSString){ 
     self.image = cachedImage 
     return 
    } 

    //otherwise fire off a new download 
    guard let url = URL(string: urlString) else { 
     return 
    } 
    URLSession.shared.dataTask(with: url) { 
     data, response, error in 

     //download hit an error so lets return out 
     if error != nil { 

      return 
     } 
     DispatchQueue.main.async(execute: { 
      if let downloadedImage = UIImage(data: data!) { 
       imageCache.setObject(downloadedImage, forKey: urlString as NSString) 
       self.image = downloadedImage 
      } 
     }) 
     }.resume() 
    } 

} 

にイメージをロードするために使用される拡張されavatarImageをフレーム

func setupViews() { 

    view.addSubview(tableView) 
    NSLayoutConstraint.activate([ 

     tableView.topAnchor.constraint(equalTo: self.view.topAnchor), 
     tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor), 
     tableView.leftAnchor.constraint(equalTo: self.view.leftAnchor), 
     tableView.rightAnchor.constraint(equalTo: self.view.rightAnchor), 
    ]) 

    profileView.addSubview(avatarImage) 

    avatarImage.frame = CGRect(origin: CGPoint(x: view.frame.width/2 - 80/2 , 
               y: yPositionOfAvatarImage), 
           size: CGSize(width: 80, 
              height: 80)) 
} 

を与えますavatarImageの中で、avatarImageは画面いっぱいに見えますが、imageViewのサイズではなく取り込まれたイメージのサイズと思われます。取り出した画像が1024 * 680の場合、imageViewのサイズは80 * 80ではなく1024 * 680になります。

答えて

0

私はavatarImageにフレーム

を与える。しかし、この行:

iv.translatesAutoresizingMaskIntoConstraints = false 

は "!私はこのビューを与えるフレームを無視する代わりに、制約を使用してください。" という意味まあ、制約を使うと、デフォルトでは画像ビューはその画像のサイズです。

+0

もちろん、ああ!私は制約を加え、 'translatesAutoresizingMaskIntoConstraints'を行うことが習慣になるフレームを与えないことに慣れています。ありがとうマット – luke

+0

私はフレームの代わりにあなたがなぜ制約を使用しないのか分かりません。 – matt

+0

else実際のコードでは、「scrollViewDidScroll」を呼び出して、avatarImageの位置を調整して調整します。私は制約を使うことはできません。それを言わなければならない。 – luke

関連する問題