gpt4 book ai didi

ios - 是否可以在 iOS 上为同一布局 anchor 定义范围约束?

转载 作者:行者123 更新时间:2023-11-29 05:22:09 26 4
gpt4 key购买 nike

我想在 UICollectionView 的每个单元格中显示图像。图像的宽度应与屏幕相同,但其高度取决于其大小。我想确保图像的宽高比范围受到限制(例如 1.91 到 4/5)。服务器上存储的图像可以是任何长宽比;因此,他们不受约束。当在 UICollectionViewCell 中显示时,如果它们小于或大于边界框范围(即 1.91 到 4/5),它们应该按比例缩放以填充。

例如,如果图像的纵横比为 2:1,则应将其限制为 1.91:1。如果长宽比为 1:2,则应将其限制为 4:5。我想使用新的 UICollectionViewCompositionalLayout

enter image description here

对于这项工作,最初我想到的是预先计算高度并将其存储在数据模型中,并据此更新 View 高度。请参阅View height constraints are not set correctly as I scroll UICollectionView up and down ,但我对这种方法有疑问。

我的初学者问题是,是否可以为同一个 anchor 定义两个约束来定义范围?

_imageContainer.heightAnchor.constraintGreaterThanOrEqualToAnchor(_imageContainer.widthAnchor, multiplier: 4.0/5).active = true
_imageContainer.heightAnchor.constraintLessThanOrEqualToAnchor(_imageContainer.widthAnchor, multiplier: 1.91).active = true

上述代码的目标是定义范围约束。第二个约束是否会覆盖第一个约束,从而使第一个约束不再有效?其次,解决上述关于不同高度显示图像的问题的推荐方法是什么?

最佳答案

是的,就像谷歌在其图像 API 中所做的那样,并将图像尺寸存储在您的数据库中。

查看他们的自定义搜索API以获取路线

customsearch/v1

返回

@"pagemap.cse_thumbnail.width"
@"pagemap.cse_thumbnail.height"

一旦获得这些值,然后在 UICollectionView 的代理方法中,特别是 sizeForItemAtIndexPath ,您可以从服务器查询中提取这些存储的值,然后将单元格的大小标准化为等于总宽度的宽度屏幕的高度可调整以适应。

您可以使用这样的函数以标准化方式获取单元格的大小

static CGFloat CustomFloatCalc(CGFloat value) {
CGFloat scale = [UIScreen mainScreen].scale;
return floor(value * scale) / scale;
}

像这样:

     CGFloat itemHeight = 0;
if (itemSize.height > 0 && itemSize.width > 0) {
itemHeight = CustomFloatCalc(itemSize.height * itemWidth / itemSize.width);
}

现在您可以在 sizeForItemAtIndexPath 中动态计算图像的值,但这样做会增加设备上的内存和 CPU 负载。最好像 Google 那样将值存储在后端。

祝你好运

关于ios - 是否可以在 iOS 上为同一布局 anchor 定义范围约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com