struct ContentView : View {
var body: some View {
HStack {
Button(action: {}) {
Text("MyButton")
.color(.white)
.font(Font.system(size: 17))
}
.frame(height: 56)
.background(Color.red, cornerRadius: 0)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我想将其固定在supreview的边缘(跟踪到superview的尾随和领先)。像这样:
HStack对我没有帮助,这是期望。固定frame或宽度等于UIScree.size不是灵活的解决方案。
Den*_*Fav 16
您需要使用.frame(minWidth: 0, maxWidth: .infinity)修饰符
添加下一个代码
Button(action: tap) {
Text("Button")
.frame(minWidth: 0, maxWidth: .infinity)
.background(Color.red)
}
.padding([.leading, .trailing], 20)
Run Code Online (Sandbox Code Playgroud)
填充修改器将使您在边缘有一些空间。
请记住,修饰符的顺序很重要。因为修饰符实际上是包裹视图的函数(它们不更改视图的属性)
Mat*_*ini 12
您可以使用GeometryReader:https : //developer.apple.com/documentation/swiftui/geometryreader
根据苹果的说法:
此视图将灵活的首选大小返回到其父布局。
这是一种灵活的解决方案,因为它会根据父布局的变化而变化。
这是一个纯 SwiftUI 解决方案,您想要填充父级的宽度,但将高度限制为任意纵横比(假设您想要方形图像):
Image("myImage")
.resizable()
.scaledToFill()
.frame(maxWidth: .infinity, maxHeight: .infinity)
.aspectRatio(16.0 / 9.0, contentMode: .fit)
Run Code Online (Sandbox Code Playgroud)
只需将 16.0 / 9.0 替换为您想要的任何纵横比即可。
我花了大约一天的时间试图解决这个问题,因为我不想使用 GeometryReader 或 UIScreen.main.bounds (这不是跨平台的)
编辑:找到了一种更简单的方法。
简单地向您的代码添加以下内容将使按钮边缘到边缘扩展。(如果需要,您也可以添加填充)
.frame(minWidth: 0, maxWidth: .infinity)
Run Code Online (Sandbox Code Playgroud)
整个 Button 代码如下所示:
struct ContentView : View {
var body: some View {
HStack {
Button(action: {}) {
Text("MyButton")
.color(.white)
.font(Font.system(size: 17))
}
.frame(minWidth: 0, maxWidth: .infinity)
.padding(.top, 8)
.padding(.bottom, 8)
.background(Color.red, cornerRadius: 0)
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4949 次 |
| 最近记录: |