有很多解决方案可以尝试使用 VStack 内的 HStack 在 SwiftUI 中对齐多个图像和文本。有什么办法可以实现多个标签吗?添加到列表中时,多个标签会自动垂直对齐。当它们嵌入到 VStack 中时,是否有一种简单的方法可以做到这一点?
struct ContentView: View {
var body: some View {
// List{
VStack(alignment: .leading){
Label("People", systemImage: "person.3")
Label("Star", systemImage: "star")
Label("This is a plane", systemImage: "airplane")
}
}
}
Run Code Online (Sandbox Code Playgroud) 下面是我在 SwiftUI 中创建视图的代码。我想将“欢迎”按钮放置在屏幕底部,如下所示。
struct welcomeViewControllerView: View {
var body: some View {
Text("Welcome")
.font(.system(size: 20, design: .rounded))
.padding(.leading)
.multilineTextAlignment(.center)
.background(
Image("splashBackground")
.resizable()
.edgesIgnoringSafeArea(.all)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height))
Button(action:{print("button pressed")})
{
Text("Continue")
.font(.system(size: 20, design: .rounded))
.foregroundColor(.black)
.frame(width: 300, height: 50, alignment: .center)
.background((Image("buttonImage")).resizable().frame(width: 300, height: 50, alignment: .center))
}
}
}
class welcomeViewController: UIHostingController<welcomeViewControllerView> {
required init?(coder: NSCoder)
{
super.init(coder: coder,rootView: welcomeViewControllerView());
}
override func viewDidLoad()
{
super.viewDidLoad()
view.backgroundColor = .white
}
}
Run Code Online (Sandbox Code Playgroud)
如何将按钮放置在屏幕底部?我发布了下面的屏幕。我对使用 SwiftUI 还很陌生。
鉴于我有这样的看法..
@State var tabIndex: Int = 0
var body: some View {
TabView(selection: $tabIndex)
{
Text("Tab 1").tabItem({
Image(systemName: "message")
}).tag(0)
Text("Tab 2").tabItem({
Image(systemName: "arkit")
}).tag(1)
Text("Tab 3").tabItem({
Image(systemName: "battery.100")
}).tag(2)
}.navigationBarTitle("Tabbed View")
}
Run Code Online (Sandbox Code Playgroud)
这会产生一个这样的视图,这是预期的:
在我可以使用的栏中添加导航按钮
.navigationBarItems(trailing:
Button(action: {print("Button was tapped")}) {
Image(systemName: "plus")
.resizable().frame(width: 20, height: 20)
})
Run Code Online (Sandbox Code Playgroud)
按预期添加按钮
有没有办法只根据条件添加(或显示)按钮?
if (self.tabIndex == 1){
show button
}
else {
don't show button
}
Run Code Online (Sandbox Code Playgroud) 在 Twitter 应用程序中,当您点击共享按钮,然后点击复制链接按钮时,显示“已复制到剪贴板”的视图将从顶部移入屏幕。它在屏幕顶部停留约 1 秒钟,然后移回到屏幕上并消失。像这样:
我的目标是每当我双击文本视图时在我的 SwiftUI 应用程序中创建相同的效果。但我就是不知道如何实现这种效果。这是我能得到的最好的:
import SwiftUI
struct ContentView: View {
@State private var copied = false
var body: some View {
GeometryReader { gr in
ZStack {
if copied {
Text("Copied to clipboard")
.padding()
.background(Color.blue.cornerRadius(20))
.position(x: gr.frame(in: .local).midX)
.transition(.move(edge: .top))
.animation(Animation.easeInOut(duration: 2).repeatCount(2))
}
VStack {
Text("Copy")
.onTapGesture(count: 2) {
self.copied.toggle()
}
}
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
}
Run Code Online (Sandbox Code Playgroud) 在 a 中LazyVGrid,我显示来自服务器的数据(这里我使用字母表作为示例),我的目标是在中心显示最后一行,而不是leading最后一行包含的项目少于 3 个。可行吗?
目前,它看起来像这样:
struct ContentView: View {
let alphabet = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
let preference = [
GridItem(.flexible()),
GridItem(.flexible()),
GridItem(.flexible())
]
var body: some View {
ScrollView {
LazyVGrid(columns: preference) {
ForEach(alphabet, id: \.self) { value in
ZStack {
Rectangle()
.frame(width: 120, height: 120)
.foregroundColor(Color(UIColor.systemIndigo))
.cornerRadius(16)
Text(value.description)
.foregroundColor(.white)
.font(.title)
} …Run Code Online (Sandbox Code Playgroud) 我有这个简单应用程序的按钮和标签。当我点击按钮时,它会突出显示我的按钮(您可以在附图中看到),那么我该如何禁用它?我错过了什么?
代码:
struct ContentView: View {
@State private var displayLabel = 0
var body: some View {
GeometryReader{ geo in
ZStack{
Button(action: {
displayLabel += 1
}, label: {
Rectangle()
.foregroundColor(.blue)
.frame(width: geo.size.width, height: geo.size.height)
}).buttonStyle(PlainButtonStyle())
Text("\(displayLabel)")
.font(Font.system(size:75, design: .rounded))
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在观看一个教程,其中作者在循环时使用了while let 。为什么?我在 上没有找到任何内容while let,所以有人可以向我解释一下吗?
while let node = currentNode {
print(node.value, terminator: "->")
currentNode = node.next
}
Run Code Online (Sandbox Code Playgroud)