您如何以编程方式将图像设置为在每个设备上具有相同的相对大小和位置?

Posted

技术标签:

【中文标题】您如何以编程方式将图像设置为在每个设备上具有相同的相对大小和位置?【英文标题】:How do you programmatically set up images to have the same relative size and position on every device? 【发布时间】:2016-11-15 08:45:10 【问题描述】:

我有 3 个矩形,它们的大小和位置都很完美……在 iPhone 6 和 7 plus 上。当我在较小的 iPhone 或 iPad 上运行它时,它看起来完全不对。

我可以在我的应用程序开始时创建一个巨大的 if 语句来检查设备,然后相应地为变量赋值,但必须有更好的方法,对吧?大多数应用程序如何调整所有内容的大小和位置,以使应用程序在每台设备上看起来几乎相同?

    let blueRect = UIView(frame:CGRect(x: self.view.frame.size.width / 2 - 100, y: 100, width: 200, height: 100))

    blueRect.backgroundColor = UIColor.blue

    self.view.addSubview(blueRect)



    let greenRect = UIView(frame:CGRect(x: self.view.frame.size.width / 2 - 100, y: 300, width: 200, height: 100))

    greenRect.backgroundColor = UIColor.green

    self.view.addSubview(greenRect)



    let redRect = UIView(frame:CGRect(x: self.view.frame.size.width / 2 - 100, y: 500, width: 200, height: 100))

    redRect.backgroundColor = UIColor.red

    self.view.addSubview(redRect)

【问题讨论】:

尽量不要使用常量,所以在 go height 100 的地方你可以使用 frame.size.height/3 我认为你应该使用约束,检查this answer @HylianGinyu 您应该定义什么是完美的,什么是错误的。您要实现哪种布局? Perfect 在 6 和 7 plus 模拟器中彼此相距 200x100 和 200 点。较小的 iPhone 的矩形太大并且超出屏幕,而 iPad 的矩形很小并且都在顶部聚集。我想实现在每台设备上以 6 和 7 plus 观看时相同的大小和位置。 @AhmadF 我之前看过,我尝试将 7 种方法中的每一种都粘贴到我的代码中,但它要么什么也没做,要么在我的屏幕中间放了一个小红方块。 【参考方案1】:

回答你的问题,

但必须有更好的方法,对吧?大多数应用程序如何调整大小和位置,以使应用程序在每台设备上看起来都差不多?

是的,有更好的方法称为Auto Layout

如果您是 ios 新手,我真的建议您在 storyboard 中进行操作。更容易理解Auto Layout 在 iOS 中的工作方式。那里有非常好的教程可以帮助您理解Auto Layout。查看 Ray Wenderlich website 的文章。

如果您真的希望以编程方式执行此操作,即使您尝试在代码中定义相对大小,当您有更多视图时也会变得非常混乱。 Auto LayoutConstraints 仍然是要走的路。但是,Programmatically Creating Constraints 的 Apple 方式实际上过于冗长,在我看来,使用起来很麻烦。像 Spring 这样的外部框架将对以编程方式执行此操作有很大帮助。

最终,无论您想走哪条路,对Auto LayoutConstraints 的深刻理解在iOS 中都很重要。否则,要为这么多不同的 Apple 设备创建合适的视图将非常困难。

【讨论】:

以上是关于您如何以编程方式将图像设置为在每个设备上具有相同的相对大小和位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式设置设备时间

您如何以编程方式将焦点设置到已具有焦点的 WPF ListBox 中的 SelectedItem?

将桌面设置为在 Windows 中以双显示方式扩展/克隆

Swift:如何以编程方式获取iOS设备的唯一标识符?

以编程方式在移动设备上设置电子邮件帐

如何拥有具有两种不同单元格类型的 UITableView 并以编程方式设置每个单元格布局,而不是通过情节提要?