首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIImageView拥抱&插入新图像时压缩优先级不能正常工作

UIImageView拥抱&插入新图像时压缩优先级不能正常工作
EN

Stack Overflow用户
提问于 2022-02-22 02:52:32
回答 2查看 394关注 0票数 0

我想让view像这样:

一切都很好,但是当我将图像从API放到那个UIImageView中时,就会发生这样的情况:

UIImageView正在伸展,即使有一些Hugging PriorityCompression priority

视图代码:

代码语言:javascript
复制
    let scrollView = UIScrollView()
    let contentView = UIView()

    lazy var posterImage = UIImageView().then {
        $0.contentMode = .scaleAspectFit
        $0.image = UIImage(named: "img_placeholder")    // placeholder image
        
        $0.backgroundColor = .orange
        $0.setContentHuggingPriority(.required, for: .horizontal)
    }
    
    lazy var titleLabel = UILabel().then {
        $0.textColor = .white
        $0.textAlignment = .left
        
        $0.font = UIFont.systemFont(ofSize: 25, weight: .medium)
        $0.numberOfLines = 0
        $0.minimumScaleFactor = 10
        
        $0.setContentHuggingPriority(.required, for: .vertical)
    }
    
    lazy var taglineLabel = UILabel().then {
        $0.numberOfLines = 0
        $0.textColor = .lightGray
        $0.textAlignment = .left
        $0.font = UIFont.systemFont(ofSize: 15, weight: .regular)
    }
    
    lazy var runtimeIconLabel = IconLabel().then {
        $0.icon.image = UIImage(systemName: "clock")
    }
    
    lazy var ratingIconLabel = IconLabel().then {
        $0.icon.image = UIImage(systemName: "star.fill")
        $0.icon.tintColor = .orange
    }
    
    lazy var iconLabels = UIStackView().then {
        $0.addArrangedSubview(runtimeIconLabel)
        $0.addArrangedSubview(ratingIconLabel)
        
        $0.axis = .horizontal
        $0.distribution = .fill
        $0.alignment = .leading
        $0.spacing = 5
    }
    
    lazy var mainInfoLabelStack = UIStackView().then {
        $0.addArrangedSubview(titleLabel)
        $0.addArrangedSubview(taglineLabel)
        $0.addArrangedSubview(UIView())
        $0.addArrangedSubview(iconLabels)
        
        $0.axis = .vertical
        $0.distribution = .fill
        $0.alignment = .leading
        $0.spacing = 5
    }
        
    lazy var mainInfoStackView = UIStackView().then {
        $0.addArrangedSubview(posterImage)
        $0.addArrangedSubview(mainInfoLabelStack)
        
        $0.axis = .horizontal
        $0.distribution = .fill
        $0.alignment = .fill
        $0.spacing = 10
        $0.isLayoutMarginsRelativeArrangement = true
        $0.layoutMargins = UIEdgeInsets.detailViewComponentInset

        posterImage.setContentHuggingPriority(.required, for: .horizontal)
        mainInfoLabelStack.setContentHuggingPriority(.defaultLow, for: .horizontal)

    }

增加限制因素:

代码语言:javascript
复制
        self.view.addSubview(scrollView)
        scrollView.addSubview(contentView)
        
        scrollView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        contentView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
            make.width.equalToSuperview()
        }

        contentView.addSubview(mainInfoStackView)

        mainInfoStackView.snp.makeConstraints { make in
            make.top.left.right.equalToSuperview()
            make.height.equalTo(self.view.snp.width).multipliedBy(0.45)
        }

我想删除UIImageView 的非预期边距

EN

回答 2

Stack Overflow用户

发布于 2022-02-22 05:19:53

由于维度的原因,必须将图像contentMode设置为"posterImage“的”posterImage“:

代码语言:javascript
复制
lazy var posterImage = UIImageView().then {
        $0.contentMode = .scaleAspectFill
        $0.image = UIImage(named: "img_placeholder")    // placeholder image
        
        $0.backgroundColor = .orange
    }

删除以下代码

代码语言:javascript
复制
$0.setContentHuggingPriority(.required, for: .horizontal)

并设置图像的固定宽度和高度约束。

票数 0
EN

Stack Overflow用户

发布于 2022-02-22 13:07:25

在设置图像之前,UIImageView没有内部大小。此时,如果您没有给出控制它的约束条件,UIKit将根据新图像更改其大小。

你可能想要这样的东西:

代码语言:javascript
复制
posterImage.snp.makeConstraints { make in
    make.width.equalTo(posterImage.snp.height).multipliedBy(0.75)
}

为图像视图提供4:3的比例。

调整.multipliedBy值以适应您的设计。

编辑

结果是..。

最初,posterImage有一个“占位符”映像:

然后我们将它的图像设置为这一个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71215368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档