我想将“图像”帧的大小调整为一个正方形,该正方形采用的屏幕宽度相同,因此高度的值(屏幕宽度)相同。
以下代码无效,因为它为图像提供了相同的视图高度。
var body: some View {
Image("someImage")
.resizable()
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
.clipped()
}
Run Code Online (Sandbox Code Playgroud)
bes*_*per 49
您可以为其创建UIScreen
扩展。喜欢:
extension UIScreen{
static let screenWidth = UIScreen.main.bounds.size.width
static let screenHeight = UIScreen.main.bounds.size.height
static let screenSize = UIScreen.main.bounds.size
}
Run Code Online (Sandbox Code Playgroud)
用法:
UIScreen.screenWidth
Run Code Online (Sandbox Code Playgroud)
小智 24
我通过创建以下内容提出了使用环境键的解决方案:
private struct MainWindowSizeKey: EnvironmentKey {
static let defaultValue: CGSize = .zero
}
extension EnvironmentValues {
var mainWindowSize: CGSize {
get { self[MainWindowSizeKey.self] }
set { self[MainWindowSizeKey.self] = newValue }
}
}
Run Code Online (Sandbox Code Playgroud)
然后通过读取创建窗口的位置的大小:
var body: some Scene {
WindowGroup {
GeometryReader { proxy in
ContentView()
.environment(\.mainWindowSize, proxy.size)
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我可以直接获取任何 SwiftUI 视图中的窗口大小,并且它会动态变化(在 macOS 上的设备旋转或窗口大小调整时):
@Environment(\.mainWindowSize) var mainWindowSize
Run Code Online (Sandbox Code Playgroud)
Meh*_*lar 13
您可以使用 UIScreen.main.bounds .width或.height
.frame(
width:UIScreen.main.bounds.width,
height:UIScreen.main.bounds.height
)
Run Code Online (Sandbox Code Playgroud)
尝试使用Geometry Reader
let placeholder = UIImage(systemName: "photo")! // SF Symbols
struct ContentView: View {
var body: some View {
GeometryReader { geometry in
Image(uiImage: placeholder)
.resizable()
.frame(width: geometry.size.width, height: geometry.size.width, alignment: .center)
// .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
.clipped()
}
}
}
Run Code Online (Sandbox Code Playgroud)
最简单的方法是调整图像大小并将纵横比设置为 1.0:
var body: some View {
Image("someImage")
.resizable()
.aspectRatio(1.0, contentMode: .fit)
}
Run Code Online (Sandbox Code Playgroud)