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になります。
もちろん、ああ!私は制約を加え、 'translatesAutoresizingMaskIntoConstraints'を行うことが習慣になるフレームを与えないことに慣れています。ありがとうマット – luke
私はフレームの代わりにあなたがなぜ制約を使用しないのか分かりません。 – matt
else実際のコードでは、「scrollViewDidScroll」を呼び出して、avatarImageの位置を調整して調整します。私は制約を使うことはできません。それを言わなければならない。 – luke