我正在尝试实现一个按钮,该按钮使用“来自Botton的幻灯片”动画呈现另一个场景。
PresentationButton看起来不错,因此我尝试了一下:
import SwiftUI
struct ContentView : View {
var body: some View {
NavigationView {
PresentationButton(destination: Green().frame(width: 1000.0)) {
Text("Click")
}.navigationBarTitle(Text("Navigation"))
}
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
Group {
ContentView()
.previewDevice("iPhone X")
.colorScheme(.dark)
ContentView()
.colorScheme(.dark)
.previewDevice("iPad Pro (12.9-inch) (3rd generation)"
)
}
}
}
#endif
Run Code Online (Sandbox Code Playgroud)
我希望绿色视图能够覆盖整个屏幕,并且还希望模式不能“拖动以关闭”。
是否可以在PresentationButton中添加修饰符以使其全屏显示并且不可拖动?
我也尝试过导航按钮,但是:-它不会“从底部滑动”-它在详细信息视图上创建了“后退按钮”,我不希望这样
谢谢!
目标:使用 SwiftUI(而不是 UIKit)进行 SceneKit 命中测试
问题:当我在 SwiftUI“UIViewRepresentable”上嵌入默认船舶场景时,示例 handleTap 函数不起作用。我得到了他的错误:
“‘#selector’的参数引用了未暴露给 Objective-C 的实例方法‘handleTap’”
如何创建命中测试并将数据传递到另一个 SwiftUI 视图?
import SwiftUI
import SceneKit
var handleTap: (() -> Void)
struct ScenekitView : UIViewRepresentable {
let scene = SCNScene(named: "ship.scn")!
func makeUIView(context: Context) -> SCNView {
// create and add a camera to the scene
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
// place the camera
cameraNode.position = SCNVector3(x: 0, y: 0, z: 15)
// retrieve the ship node
let ship = scene.rootNode.childNode(withName: "ship", recursively: …Run Code Online (Sandbox Code Playgroud) 点击时列表行的默认颜色为灰色。
我知道如何使用 .listRowBackground 更改背景颜色,但随后它会更改为整个列表。
如何在点击时更改为自定义颜色,以便只有被点击的行保持红色?
import SwiftUI
struct ExampleView: View {
@State private var fruits = ["Apple", "Banana", "Grapes", "Peach"]
var body: some View {
NavigationView {
List {
ForEach(fruits, id: \.self) { fruit in
Text(fruit)
}
.listRowBackground(Color.red)
}
}
}
}
struct ExampleView_Previews: PreviewProvider {
static var previews: some View {
ExampleView()
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试制作一个处理列表和/或 Vstacks 的段控件
我能够使用文本创建段控件,但不能使用列表
import SwiftUI
struct MaterialSegmentControl : View {
@State private var MaterialType = 0
var body: some View {
NavigationView {
VStack {
SegmentedControl(selection: $MaterialType) {
Text("Style").tag(0)
Text("Text").tag(1)
Text("Arrange").tag(2)
}
Text("Value: \(MaterialType)")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能有一个在列表和/或 Vstacks 之间切换的段控件?
我正在尝试创建一个嵌套的分层列表,以便对于每个任务,我都可以拥有像 iOS 提醒应用程序中的子任务:
第一次尝试是在列表单元格中嵌入另一个列表。
import SwiftUI
struct SwiftUIView: View {
var body: some View {
List {
List {
Text("Hello, World!")
}
}
}
}
struct SwiftUIView_Previews: PreviewProvider {
static var previews: some View {
SwiftUIView()
}
Run Code Online (Sandbox Code Playgroud)
但是,没有结果...
任何人都可以帮忙吗?
干杯
我正在使用 Xcode 11 GM
我的层次结构是:
列表 > 表单(选择器)
这是列表的代码:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView{
List {
NavigationLink(destination: FormView())
{
Text("Item 1")
}
}
.navigationBarTitle("List")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
这是表单的代码:
import SwiftUI
struct FormView: View {
var body: some View {
Form {
Picker(selection: .constant(1), label: Text("Picker")) {
Text("1").tag(1)
Text("2").tag(2)
}
}
.navigationBarTitle("Form")
}
}
struct FormView_Previews: PreviewProvider {
static var previews: …Run Code Online (Sandbox Code Playgroud) 我创建了这个弹出窗口:
import SwiftUI
struct Popover : View {
@State var showingPopover = false
var body: some View {
Button(action: {
self.showingPopover = true
}) {
Image(systemName: "square.stack.3d.up")
}
.popover(isPresented: $showingPopover){
Rectangle()
.frame(width: 500, height: 500)
}
}
}
struct Popover_Previews: PreviewProvider {
static var previews: some View {
Popover()
.colorScheme(.dark)
.previewDevice("iPad Pro (12.9-inch) (3rd generation)")
}
}
Run Code Online (Sandbox Code Playgroud)
默认行为是在外部点击后关闭。
问题:如何将弹出窗口设置为: - 坚持(在外部点击时不会被关闭)?- 活动时不遮挡屏幕?
目标是使用新的 .fileImporter 修饰符加载 2 个不同的图像(图像 1 和 2)。
问题是我将相同的图像加载到两个缩略图(图像 1 和 2)。
有人设法使用 .fileImporter 修饰符做到这一点吗?
import SwiftUI
struct ContentView: View {
@State var openFile = false
@State var img1 = UIImage()
@State var img2 = UIImage()
@State var fileName = ""
var body: some View {
Form {
//image 1
Button(action: {
self.openFile.toggle()
}){
Image(uiImage: self.img1)
.renderingMode(.original)
.resizable()
.frame(width: 48, height: 48)
.clipShape(Circle())
}
//image 2
Button(action: {
self.openFile.toggle()
}){
Image(uiImage: self.img2)
.renderingMode(.original)
.resizable()
.frame(width: 48, height: 48)
.clipShape(Circle())
} …Run Code Online (Sandbox Code Playgroud) 目标是在 Mac Catalyst 上制作一个半透明的侧边栏。
下面的代码给出了一个不透明的侧边栏(图 1)。
在 Mac(不是催化剂)上,侧边栏看起来不错(图 2)。
Mac Catalyst 上是否可以有一个半透明的侧边栏?
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
//sidebar
List {
Label("Books", systemImage: "book.closed")
Label("Tutorials", systemImage: "list.bullet.rectangle")
}
.background(Color.clear)
.listStyle(SidebarListStyle())
//content
Text("Sidebar")
.navigationTitle("Sidebar")
}
}
}
Run Code Online (Sandbox Code Playgroud) 目标:在 SwiftUI 上使用自定义字体,针对 MacOS。
问题:在 iOS 上,自定义字体在 SwiftUI 中工作正常:

import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
.font(Font.custom("SourceCodePro-ExtraLight", size: 40))
Text("Hello, world!")
.font(Font.custom("LobsterTwo", size: 40))
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
尝试过:我确保这两种字体都添加到相应 iOS 和 MacOs 目标上的“信息”选项卡中:

SwiftUI 在底层使用 UIFont 似乎是一个问题,并且需要一个特殊的 NSFont...
任何帮助深表感谢!
swiftui ×10
xcode11 ×3
swiftui-list ×2
xcode ×2
ios ×1
mac-catalyst ×1
macos ×1
popover ×1
scenekit ×1
xcode12 ×1