有谁能告诉我如何在Swift UI中制作响应式UI吗?Swift UI兼容所有设备,使用figma文本(如24),它会显示iphone8和iphone11相同视图
kx1ctssn1#
您需要尽量减少应用中硬编码的大小或帧的数量,因为这会使您的应用在不同的手机型号和方向上的响应性降低。以下是一些链接,您可以查看以了解响应式UI:https://www.youtube.com/watch?v=67ZCQ5ihj_I&t=186shttps://www.youtube.com/watch?v=ALzrixd_hd8也可以考虑试用一下几何阅读器。下面的文章将深入介绍它是什么以及如何使用它:https://www.hackingwithswift.com/quick-start/swiftui/how-to-provide-relative-sizes-using-geometryreader
f4t66c6m2#
一个更好的方法是,在不使用几何阅读器 Package 所有视图的情况下,进行扩展以获得带有和高度的屏幕,这也可以在所有页面上调用,而不必像几何阅读器那样在每个页面上进行扩展。
extension View{ func getScreenBounds() -> CGRect{ return UIScreen.main.bounds } }
调用它与几何读取器相同:
.frame(width: getScreenBounds().width * 0.5, height: getScreenBounds().width * 0.5
h9vpoimq3#
对于图像,你可以这样做。你可以使用GeometryReader类来使你的图像具有响应性。不要对图像使用硬编码大小。在这个代码片段中,我使用了屏幕宽度的50%,高度也将使用高度的50%。
var body: some View { GeometryReader { reader in VStack { Image(contact.imageName) .resizable() .aspectRatio(contentMode: .fill) .frame(width: reader.size.width * 0.5, height: reader.size.width * 0.5) .clipped() .cornerRadius(reader.size.width) .shadow(radius: 10) } } }
3条答案
按热度按时间kx1ctssn1#
您需要尽量减少应用中硬编码的大小或帧的数量,因为这会使您的应用在不同的手机型号和方向上的响应性降低。以下是一些链接,您可以查看以了解响应式UI:
https://www.youtube.com/watch?v=67ZCQ5ihj_I&t=186s
https://www.youtube.com/watch?v=ALzrixd_hd8
也可以考虑试用一下几何阅读器。下面的文章将深入介绍它是什么以及如何使用它:https://www.hackingwithswift.com/quick-start/swiftui/how-to-provide-relative-sizes-using-geometryreader
f4t66c6m2#
一个更好的方法是,在不使用几何阅读器 Package 所有视图的情况下,进行扩展以获得带有和高度的屏幕,这也可以在所有页面上调用,而不必像几何阅读器那样在每个页面上进行扩展。
调用它与几何读取器相同:
h9vpoimq3#
对于图像,你可以这样做。你可以使用GeometryReader类来使你的图像具有响应性。不要对图像使用硬编码大小。在这个代码片段中,我使用了屏幕宽度的50%,高度也将使用高度的50%。