Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 通过编程设置图像高度时,图像高度不起作用_Ios_Swift - Fatal编程技术网

Ios 通过编程设置图像高度时,图像高度不起作用

Ios 通过编程设置图像高度时,图像高度不起作用,ios,swift,Ios,Swift,我通过编程设置图像的高度。但它只能在iPhone SE上正常工作。但在iphonex上就不是这样了 以下是截图: 现在让我们看一下我的代码。正如你们所见,我通过编程设置了图像的x和y位置。还有高度和宽度 let kint = skrolas.frame.height // Here's my scrollView frame vienas.frame = CGRect(x: 8, y: 17, width: screenWidth-42, height: kint) // Here

我通过编程设置图像的高度。但它只能在iPhone SE上正常工作。但在iphonex上就不是这样了

以下是截图:

现在让我们看一下我的代码。正如你们所见,我通过编程设置了图像的x和y位置。还有高度和宽度

let kint = skrolas.frame.height // Here's my scrollView frame

    vienas.frame = CGRect(x: 8, y: 17, width: screenWidth-42, height: kint) // Here I set my first image programatically. I want height to be the same like my scrollView height.


    let dydis2 = vienas.frame // Here's my first picture frame

    du.frame = CGRect(x: (dydis2.origin.x+(screenWidth-42)+8), y: 17, width: screenWidth-42, height: kint) // Here's my second picture


    let dydis3: CGRect = du.frame
    trys.frame = CGRect(x: (dydis3.origin.x+(screenWidth-42)+8), y: 17, width: screenWidth-42, height: kint) // And thirt picture
正如你所见,我的宽度正常工作。但我的身高不是。我不明白为什么。正如我在代码中提到的,我将图像高度设置为与scrollView相同

在iPhone XS上,我的滚动视图如下所示:

以下是我项目的链接:


问题1:应该使用自动布局约束,而不是显式设置框架

问题2:您正在
viewdiload()
中设置帧大小,这在进行任何布局之前是,因此您无法访问实际的屏幕宽度和高度

问题3:你有一个“上传另一张照片”的选项,所以我猜你最终可能会想展示很多照片。使用您的方法,您将很快遇到内存问题

您可能应该考虑使用
UICollectionView
。这将使您能够“自动”水平滚动,并将更有效地使用内存--您可以滚动很多很多图像而不会出现问题


不过,要查看大小调整问题,第一步是将大小调整代码从
viewdiload()
移动到
viewdilayoutsubviews()
,这样就可以获得正确的大小值。

为什么不使用
Autolayout
?设置帧的代码在哪里调用?如果您想使用滚动功能显示多个图像,请使用集合视图来实现这一点。您是否在
viewdiload()
中设置图像视图帧?@DonMag是的,我在viewdiload()中设置。@DonMag还为我的项目指定了链接。viewdilayoutsubviews()就是这种情况。无论如何,我尝试使用UICollectionView。老实说,一开始我担心这太复杂了,但看起来要简单得多。非常感谢。我将把这个答案标为正确。你给了我两个解决方案。非常感谢。
@IBOutlet weak var skrolas: UIScrollView!
public var screenWidth: CGFloat {
    return UIScreen.main.bounds.width
}
public var screenHeight: CGFloat {
    return UIScreen.main.bounds.height
}