iOS - 在scaleaspectfit UIImageView的图像上布局UIImageView的子视图

时间:2017-09-21 18:43:36

标签: ios swift uitableview swift3 uiimageview

我有UITableView,其中是每个单元格上具有相同视图(仅限不同内容)的UIStackView。(tableView&#39s的单元格如下所示)

UITableView cell

视图由上面的UIImageView和UILabel组成。由于保持比率,UIImageView的内容设置为.scaleAspectFit。我有一个问题,为imageView添加一个新的图像层(子视图),它必须与当前图像完美重叠,但我无法通过autolayout正确地适应图像,因为我只知道UIImageView的锚点,而不是图像的锚(它不存在)。

PS:我曾尝试使用imageview.image.size.width来设置宽度和高度,但它也没用。

使用autolayout添加子视图的当前代码:

func addStripe(){
        let stripeLayer = UIImageView(image: #imageLiteral(resourceName: "book_new"))
        imageView.addSubview(stripeLayer)

        stripeLayer.contentMode = .scaleToFill
        stripeLayer.translatesAutoresizingMaskIntoConstraints = false

        stripeLayer.topAnchor.constraint(equalTo: imageView.topAnchor).isActive = true
        stripeLayer.leadingAnchor.constraint(equalTo: imageView.centerXAnchor).isActive = true
        stripeLayer.trailingAnchor.constraint(equalTo: imageView.trailingAnchor).isActive = true

Aaaand有addStripe函数(错误的函数)的结果

And there is a result

感谢大家的时间!

2 个答案:

答案 0 :(得分:1)

我认为您应该将stripeLayer的框架设置为等于imageView。您可以使用UIImageView的init方法执行此操作:

let stripeLayer = UIImageView(frame: imageView.frame)
stripeLayer.image = #imageLiteral(resourceName: "book_new")
imageView.addSubview(stripeLayer.image)

我希望它可以帮到你

答案 1 :(得分:0)

@ ReinhardManner的评论对我有帮助而且有效。这一行解决了我的问题

let sizeInView = AVMakeRect(aspectRatio: imgViewFake.image.size, insideRect: imgViewFake.bounds).size