以编程方式设置时图像高度不起作用

时间:2019-03-14 09:24:01

标签: ios swift

我以编程方式设置图像的高度。但它只能在iPhone SE上正常工作。但是,例如,在iPhone X上则不是。

以下是屏幕截图:

enter image description here

enter image description here

现在让我们看一下我的代码。如您所见,我以编程方式设置了图像的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相同。

我的scrollView在iPhone XS上看起来像这样: enter image description here

这是我的项目的链接: DropBox

@IBOutlet weak var skrolas: UIScrollView!
public var screenWidth: CGFloat {
    return UIScreen.main.bounds.width
}
public var screenHeight: CGFloat {
    return UIScreen.main.bounds.height
}

1 个答案:

答案 0 :(得分:1)

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

问题2:您要在viewDidLoad()中设置帧尺寸,该尺寸在发生任何布局之前 ,因此您无权访问实际的屏幕宽度和高度。

问题3:您有一个“上传另一张照片”选项,因此我猜测您可能最终想显示许多 张照片。使用您的方法,您将快速遇到内存问题。

您可能应该考虑使用UICollectionView。这样可以使您“自动”进行水平滚动,并且可以更有效地使用内存-您可以滚动浏览很多图像而没有问题。

但是,要查看尺寸问题,第一步是将尺寸代码从viewDidLoad()移至viewDidLayoutSubviews(),您将获得正确的大小值。