是否有可能完全显示蓝色标签(当前被截断)然后自动换行?
NavigationLink(destination: GameListView()) {
VStack(alignment: .leading, spacing: 5){
// Name der Sammlung:
Text(collection.name)
.font(.headline)
// Optional: Für welche Konsolen bzw. Plattformen:
HStack(alignment: .top, spacing: 10){
ForEach(collection.platforms, id: \.self) { platform in
Text(platform)
.padding(.all, 5)
.font(.caption)
.background(Color.blue)
.foregroundColor(Color.white)
.cornerRadius(5)
.lineLimit(1)
}
}
}
.padding(.vertical, 10)
}
Run Code Online (Sandbox Code Playgroud)
此外,蓝色标签中不应有换行符:
这就是它最终的样子:
我正在尝试使用 SwiftUI 重新创建基本的集合视图行为:
我有许多水平显示的视图(例如照片)。当没有足够的空间在同一行显示所有照片时,剩余的照片应换行到下一行。
下面是一个例子:
看起来可以将一个元素VStack与多个HStack元素一起使用,每个元素包含一行的照片。
我尝试使用GeometryReader和迭代照片视图来动态创建这样的布局,但它不会编译(包含声明的闭包不能与函数构建器 'ViewBuilder' 一起使用)。是否可以动态创建视图并返回它们?
澄清:
盒子/照片可以有不同的宽度(与经典的“网格”不同)。棘手的部分是我必须知道当前框的宽度才能决定它是否适合当前行,或者我是否必须开始新行。
我正在使用 SwiftUI 创建类似警报弹出窗口的东西,我使用 UIHostingController 从 UIKit 代码中呈现。视图如下所示:
VStack(spacing: 0) {
// Some text ...
HStack(spacing:0) {
Button(action: self.onCancel) { Text("Cancel") }
.padding().inExpandingRectangle().fixedSize(horizontal: false, vertical: true)
// This divider is the problem
Divider() // .fixedSize()
Button(action: self.onDelete) { Text("Delete") }
.padding().inExpandingRectangle().fixedSize(horizontal: false, vertical: true)
}
}.frame(minHeight: 0)
Run Code Online (Sandbox Code Playgroud)
这inExpandingRectangle是我在另一个 stackoverflow 问题中发现的。它将 HStack 每一侧的文本居中。
extension View {
func inExpandingRectangle() -> some View {
ZStack {
Rectangle().fill(Color.clear)
self
}
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来像这样。垃圾。
如果我把.fixedSize()放在分隔线上,它就会这样做。并不可怕,但分隔器看起来很愚蠢,并且不会扩展到按钮的大小。
我正在尝试在我的 ios 上支持 RTL 模式,该模式是使用 swiftUI 构建的,在执行此操作以更改布局方向时一切都很好:
.environment(\.layoutDirection, .rightToLeft)
Run Code Online (Sandbox Code Playgroud)
仅使用水平 ScrollView ,它无法正常工作
当我这样做时:
ScrollView(.horizontal) {
HStack{
Text("b1")
Text("b2")
Text("b3")
}
} .environment(\.layoutDirection, .rightToLeft)
Run Code Online (Sandbox Code Playgroud)
项目位置将旋转,但 HSTACK 将始终保持在左侧,如下面的屏幕截图所示:
有什么解决方案或技巧可以使其向右吗?
我已经将 ScrollView 与 HStack 一起使用,现在我需要在用户最终滚动时加载更多数据。
var items: [Landmark]
Run Code Online (Sandbox Code Playgroud)
我有我在我appeding项的使用的阵列HStack使用ForEach
ScrollView(showsHorizontalIndicator: false) {
HStack(alignment: .top, spacing: 0) {
ForEach(self.items) { landmark in
CategoryItem(landmark: landmark)
}
}
}
Run Code Online (Sandbox Code Playgroud)
在不使用加载更多按钮等自定义操作的情况下,在SwiftUI 中管理更多加载的最佳解决方案是什么。
有没有更好的方法在 SwiftUI 中定位文本,在下面的示例中,我将文本定位在 ZStack 的右下角,它工作正常但似乎冗长,我是否缺少更简单的方法......橙色线是仅用于调试,以便间隔在视图中可见。
代码
struct DisplayTwoView: View {
var body: some View {
ZStack {
Rectangle().foregroundColor(.blue)
Group {
VStack {
Spacer().frame(width: 5).background(Color.orange)
HStack {
Spacer().frame(height: 5).background(Color.orange)
Text("RABBITS").fontWeight(.black)
}
}
}.padding()
}
}
}
Run Code Online (Sandbox Code Playgroud)
看法
我添加了spacer(minLength:5),但是我可以指定 minlenght 来指定文本之间的间距。我已经附上了一个屏幕截图,以供参考,我想减少内部hstack之间的间距。
HStack {
Image("Rhea").resizable().cornerRadius(25).frame(width: 50.0, height: 50.0)
VStack(alignment: .leading) {
Text("How to enjoy your life without money").bold().font(.system(size: 20))
HStack {
Text("Lets create")
Spacer(minLength: 5)
Text("3K views")
Spacer(minLength: 5)
Text("3 hours ago")
}
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode 11.3 (11C29).
macOS 10.15.2.
Run Code Online (Sandbox Code Playgroud)
下面的 SwiftUI 视图中有两个按钮。一个打印“确定”,另一个打印“取消”。但是,无论按下哪个按钮,都会执行两个打印语句。 这是为什么?(我认为这一定是 SwiftUI 的 bug。)
struct ContentView: View {
var body: some View {
List {
HStack {
Button("OK") {
print("OK.")
}
Button("Cancel") {
print("Cancel")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
(如果 theList或 theHStack被注释掉,则每个按钮仅打印其自己的语句。)
给定一个 HStack,如下所示:
HStack{
Text("View1")
Text("Centre")
Text("View2")
Text("View3")
}
Run Code Online (Sandbox Code Playgroud)
如何强制“中心”视图位于中心?
如果水平堆栈中有 3 个项目,我想我可以这样做:
HStack{
Text("test")
Spacer()
item2()
Spacer()
Text("test")
}
Run Code Online (Sandbox Code Playgroud)
将 item2() 置于两个文本视图之间的中心。然而,这样做的问题是 item2() 不一定总是居中,因为,可以说 Text("test") 更改为 Text("a") 或其他内容。这会导致问题,并且第二个项目并不总是位于屏幕中央。
我怎样才能使 item2() 始终居中?
谢谢