ios - UIImageView 大小大于 Table View 内设置的框架

标签 ios swift

我有一个tableview,它有一个profileView标题。

lazy var tableView : UITableView = {
    let tv = UITableView()
    tv.delegate = self
    tv.translatesAutoresizingMaskIntoConstraints = false
    tv.tableHeaderView = self.profileView
    tv.dataSource = self
    tv.backgroundColor = .clear
    tv.register(ReviewTableViewCell.self, forCellReuseIdentifier: ReviewTableViewCell.reuseIdentifier)
    tv.separatorStyle = .none
    return tv
}()

lazy var profileView : UIView = {
    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    return view
}()

在 profileView/tableview 标题中,我有一个名为 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)
    }
}

我给头像图片一个框架

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))
}

这是用于将图像从 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()
   }

}

图像不是 80x80 并适合 avatarImage,而是 avatarImage 似乎填满了屏幕,并且我相信,它是获取的图像的大小而不是 imageView 的大小。如果获取的图像是1024*680,则imageView的大小将为1024*680而不是80*80。

最佳答案

I give the avatarImage a frame

但是这一行:

iv.translatesAutoresizingMaskIntoConstraints = false

的意思是“忽略我给这个 View 的框架!使用约束来代替。”好吧,使用约束的规则是默认情况下 ImageView 是其图像的大小。

关于ios - UIImageView 大小大于 Table View 内设置的框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41208553/

相关文章:

ios - 如何根据键盘大小正确实现 View 的缩小和扩展?

ios - 从 Firestore 加载图像并将其保存到 Swift 中的缓存

ios - 为什么我的 tableview 直到第二次触摸才调用 didselectrowatindexpath?

ios - Swift Alamofire - 使用 NULL 值参数的 POST 请求

swift - 如何使用 prefersLargeTitles 更改所有权注册表?

swift - 更改表格 View 高度后,CellForRowAt 不会调用

在 uiview 中具有超过 1 个 uitextfield 的 iOS 快速委托(delegate)

ios - 当使用动画 block 内函数的参数时,Swift 无法解析 UIView.animateWithDuration 中的 CurveEaseIn

ios - 无法从呈现的 View Controller 访问 TopView

ios - UIDatePicker 时间问题