- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让键盘上的按钮在水平方向上彼此靠得更近。首先我尝试调整按钮框架的宽度。但是我发现,如果我减小框架宽度,一些像“W”这样的长宽字符将无法正确显示。
然后我尝试将 HStack 的间距设置为负数,就像我在下面的代码中所做的那样。
但这会导致按钮相互重叠,可点击区域向左移动,这是 Not Acceptable (可以通过设置背景颜色为蓝色来检查)。
有没有办法在不改变字体大小的情况下减小按钮距离?
struct KeyboardView: View {
let KeyboardStack = [["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"],
["A", "S", "D", "F", "G", "H", "J", "K", "L"],
["Z", "X", "C", "V", "B", "N", "M"]]
var body: some View {
VStack(spacing: 9) {
ForEach(KeyboardStack.indices) { row in
let num = KeyboardStack[row].indices
HStack(spacing: -12) {
ForEach(num) { column in
Button(KeyboardStack[row][column]) {}
.frame(width: 12, height: 12,alignment: .center)
.padding()
// .background(Color.blue)
.font(.system(size: 15, weight: .regular, design: .default))
.foregroundColor(.white)
.buttonStyle(PlainButtonStyle())
}
}
.frame(width: 255, height: 19.5, alignment:.center)
}
}
.frame(width: 445, height: 60, alignment:.center)
}
}
最佳答案
要做的第一件简单的事情就是去掉你的 padding()
修饰符,它会为每个按钮添加额外的填充。
我假设,鉴于这是一个键盘 View ,您希望所有键的宽度都相同。您可以使用 PreferenceKey
来存储适合特定字母所需的最大宽度,然后将其用于每个 Button
,使其仅根据需要变大:
struct KeyboardView: View {
@State private var keyWidth : CGFloat = 0
let KeyboardStack = [["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"],
["A", "S", "D", "F", "G", "H", "J", "K", "L"],
["Z", "X", "C", "V", "B", "N", "M"]]
var body: some View {
VStack(spacing: 9) {
ForEach(KeyboardStack.indices) { row in
let num = KeyboardStack[row].indices
HStack(spacing: 0) {
ForEach(num) { column in
Button(action: {}) {
Text(KeyboardStack[row][column])
.font(.system(size: 15, weight: .regular, design: .default))
.foregroundColor(.white)
.buttonStyle(PlainButtonStyle())
.frame(width: keyWidth)
.background(GeometryReader {
Color.clear.preference(key: KeyWidthKey.self,
value: $0.frame(in: .local).size.height)
})
.contentShape(Rectangle())
}
}
}.onPreferenceChange(KeyWidthKey.self) { keyWidth = $0 }
}
}
}
}
struct KeyWidthKey: PreferenceKey {
static var defaultValue: CGFloat { 0 }
static func reduce(value: inout Value, nextValue: () -> Value) {
value = max(value, nextValue())
}
}
请注意,如果您更改字体大小,此解决方案将继续有效,因为它不依赖于每个键的硬编码 frame
大小。
关于SwiftUI 使按钮在 HStack 中水平地彼此靠近,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69830940/
我想要 Text("111")具有与 VStack 相同的高度包含 2222... 和 333.... struct Test7: View { var body: some View { H
Desired output 寻找一种在不均匀元素中拆分 HStack 的方法,一个占据屏幕的 1/2,另外两个占据屏幕的 1/4(见附件)。 代码: struct MyCategoryRow:
我有这个 View 来显示从SwiftUI HStack with Wrap获得的多行文本标签,但是当我将其添加到VStack中时,这些标签会与下面放置的任何其他 View 重叠。 标签显示正确,但是
我创建了一个带有水平堆栈 View (标签、按钮、按钮)的简单列表。每个按钮都有自己的按钮操作,但是当我运行时,我可以看到点击一个按钮会打印两个操作。断点也出现在这两个 Action 中。她是我的代码
我一直在尝试制作具有 HStack 的 View 与 Image在其中,Image设置为可通过 aspectRatio 调整大小的 .fill .不知何故,它破坏了所有框架并在布局中引入了空间 例如,
我创建了一个带有水平堆栈 View (标签、按钮、按钮)的简单列表。每个按钮都有自己的按钮操作,但是当我运行时,我可以看到点击一个按钮会打印两个操作。断点也出现在两个 Action 中。她是我的密码
当我使用 CountVectorizer 等生成的一些稀疏矩阵的 scipy.sparse.hstack 时,我想合并它们以用于回归,但不知何故它们速度较慢: X1 有 10000 个来自 analy
我正在使用 HStack 在我的 View 层次结构中布置一些元素。我希望能够有条件地翻转元素的顺序。 HStack { Text("Hello") Text("World") } 我的想法是
下面的命令可以很好地堆叠两个具有左右 alpha channel 的 png 文件,输出 png 文件也将保留 alpha channel 。 ffmpeg -i a.png -i b.png -fi
我目前正在尝试水平堆叠多个视频文件并收到此错误 [libvorbis @ 000001bb38f23a80] Queue input is backward in timerate=N/A speed
我试图让键盘上的按钮在水平方向上彼此靠得更近。首先我尝试调整按钮框架的宽度。但是我发现,如果我减小框架宽度,一些像“W”这样的长宽字符将无法正确显示。 然后我尝试将 HStack 的间距设置为负数,就
hstack FFmpeg 命令的问题困扰着我。 input1 和 input2 都是垂直 360x640 视频。我将 input1 裁剪成一个正方形,将其与 input2 垂直合并,然后在生成的视频
我有一个 HStack: struct BottomList: View { var body: some View { HStack() { ForE
我正在尝试执行此代码: for i in Fil: for k in DatArr: a = np.zeros(0) for j in Bui:
我对 numpy.hstack() 函数有问题。我有三个相同的 numpy 数组,我想使用 hstack() 将它们连接起来,所以我从这些 numpy 数组创建元组并使用 numpy.hstack(t
我有两个 csr 稀疏矩阵。一个包含来自 sklearn.feature_extraction.text.TfidfVectorizer 的转换,另一个包含从 numpy 数组转换而来的转换。我试图对
这个问题在这里已经有了答案: How to extend an array in-place in Numpy? (4 个答案) 关闭 8 年前。 我是 Python 的新手,不确定为什么当我使用
我有以下矩阵: >>> X1 shape: (2399, 39999) type: scipy.sparse.csr.csr_matrix 和 >> X2 shape: (2399, 333534)
给定一个矩阵数组 matrices_w 我想在每个矩阵上应用 np.hstack 函数: matrices_w = np.asarray([[[1,2,3],[4,5,6]],[[9,8,7],[6,
我目前有一个 numpy 多维数组(float 类型)和一个 numpy 列数组(int 类型)。我想将两者组合成一个多维 numpy 数组。 import numpy >> dates.shape
我是一名优秀的程序员,十分优秀!