我试图弄清楚如何在SwiftUI中使用导航栏
我想将BarButtonItem
图像放在NavigationBar
var body: some View {
NavigationView{
List(0...5) { note in
VStack(alignment: .leading) {
Text("title")
Text("Date")
.font(.subheadline)
.foregroundColor(.secondary)
}
}
.navigationBarTitle(Text("Notes"))
}
}
Run Code Online (Sandbox Code Playgroud) 我正在将SwiftUI与Xcode 11结合使用,我想NavigationBarTitle
用以下代码行更改字体:
.navigationBarTitle (Text("Navigation Bar Title"), displayMode: .inline)
.font(.subheadline)
Run Code Online (Sandbox Code Playgroud)
但是什么也没发生。有什么建议或意见吗?
因此,对于 Swift,我们可以创建新类型或使用&
运算符将其作为参数传递给方法。
示例 Swift 代码:
protocol Fooable {}
protocol Barable {}
// the new protocol
typealias FooBarable = Fooable & Barable
// method parameter
func doSomethingFor(object: Fooable & Barable) { ... }
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Kotlin 的接口中做到这一点?
我正在尝试使用新的SwiftUI框架枚举列出案例的原始值。但是,我在使“数据”符合可识别协议方面遇到了麻烦,而且我真的找不到信息。它告诉我“ Initializer'init(_:rowContent :)'要求'Data'必须符合'Identifiable'”。存根在最后一个扩展中为我提供了ObjectIdentifier变量,但不知道我应该返回什么。你能告诉我怎么做吗?如何使数据符合可识别性,以便可以列出原始值?
enum Data: String {
case firstCase = "First string"
case secondCase = "Second string"
case thirdCase = "Third string"
}
extension Data: CaseIterable {
static let randomSet = [Data.firstCase, Data.secondCase]
}
extension Data: Identifiable {
var id: ObjectIdentifier {
return //what?
}
}
//-------------------------ContentView------------------------
import SwiftUI
struct Lala: View {
var name: String
var body: some View {
Text(name)
}
}
struct ContentView: View {
var body: some View {
return List(Data.allCases) { i in …
Run Code Online (Sandbox Code Playgroud) 我正在iOS Swift
逐步重构一个大型项目。有些功能必须重命名,我不能直接重命名,因为许多其他模块直接调用它。相反,对于第一阶段发布,我想让函数的调用者知道请使用此函数而不是此函数。我举一个例子
fun length() - > Int {
//..... some logic
}
Run Code Online (Sandbox Code Playgroud)
期望在下一版本中将其重构为
fun count() - > Int {
//..... same logic
}
Run Code Online (Sandbox Code Playgroud)
对于第一阶段,我想保留两者length()
,count()
但是要警告其他开发人员不要使用现有的,即length()。所以我尝试了
fun length() - > Int {
#warning("Please use count() instead")
//..... some logic
}
Run Code Online (Sandbox Code Playgroud)
但是警告会直接发出,但不会发给呼叫者。因此,最好的方法是使呼叫者收到有关错误呼叫的通知?
注意:此处的示例只是理解问题的最简单形式。实际实现的范围和模块大小要宽得多。
我有一个圆形,UIView
并在其中添加了一条虚线描边。
,,,
var view = CAShapeLayer()
view.strokeColor = UIColor.red.cgColor
view.lineDashPattern = [2, 2]
view.frame = addphotoView.bounds
view.fillColor = nil
view.path = UIBezierPath(rect: addphotoView.bounds).cgPath
view.cornerRadius = 16
view.masksToBounds = true
addphotoView.layer.addSublayer(yourViewBorder)
Run Code Online (Sandbox Code Playgroud)
角落被抹去。
我的 iPad 就绪应用程序中有一个拆分视图:
struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink("Show the slave view HERE", destination: SlaveView())
.navigationBarTitle("Master view")
}
Text("Detail view")
.navigationBarTitle("DO NOT show the slave view here")
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我喜欢SlaveView
在列表本身中打开的视图,而不是在详细视图中。我曾尝试另一个设置NavigationView
在Slave
,也低于一文中,也将所有navigationViewStyle
的都和各S-Master
并Slave
没有运气。
这是您可以构建的最简单的 Slave 视图:
struct SlaveView: View {
var body: some View {
List {
NavigationLink("Sub Detail view", destination: Text("Sub Detail view"))
}
.navigationBarTitle("Slave view")
}
}
Run Code Online (Sandbox Code Playgroud)
那么如何更改拆分视图的主(左)视图而不是细节(右)视图?
请注意,这是一个简化的可重现代码。真正的项目使用更复杂的主从列表等等。此外,我们不想丢失导航内容,如转换、标题转换、后退按钮等。 …
我只想在我的应用程序中覆盖暗模式 UI。我补充的UIUserInterfaceStyle
是Light
。但我不确定它不起作用。还有其他选择吗?
我正在使用列表来动态创建视图的多个实例,但是,当使用列表填充时,子视图的左侧和右侧添加了我无法删除它。我试过使用 .listRowInset,但这并没有产生明显的效果。
我创建了一个按需要工作的 PostView。我正在使用“PostsView”来动态生成多个 PostView 实例。
我试图让 PostView 中的图像触摸 PostsView 中的屏幕边缘。
后视图
import SwiftUI
struct PostView: View {
var post: Post
var body: some View {
VStack {
HStack {
Text(post.songInfo.album).font(.title)
Spacer()
Text(post.songInfo.artist)
}.padding()
Image(post.songInfo.albumArtUrl)
.resizable()
.aspectRatio(UIImage(named: "sweetner")!.size, contentMode: .fit)
HStack {
Image("plus-icon")
Spacer()
Image("comment-icon")
Spacer()
Image("headset-icon")
}.padding()
HStack {
Text(post.user.userName)
Spacer()
Text(post.textContent)
}.padding()
}
}
}
Run Code Online (Sandbox Code Playgroud)
帖子视图
import SwiftUI
struct PostsView: View {
@ObservedObject var fbVM = FirebaseInfo()
var body: some View {
List(fbVM.visiblePosts) { post in
PostView(post: post) …
Run Code Online (Sandbox Code Playgroud) 我是编程新手,今天加入了 StackOverflow。我希望我可以根据指南询问:
我正在启动 SwiftUI,它似乎有许多代码仅适用于 iOS 17,请看一下:
if #available(iOS 17.0, *) {
Text("Hello World")
.font(.title.bold())
.multilineTextAlignment(.leading)
// This modifier only works on iOS 17
.foregroundStyle(.red)
} else {
Text("Hello World")
.font(.title.bold())
.multilineTextAlignment(.leading)
.foregroundColor(.red)
}
Run Code Online (Sandbox Code Playgroud)
我学到的第一件事就是不要重复相同的代码,但是如何在不重复代码的情况下轻松应用不同的修饰符?像这样的东西:
Text("Hello World")
.font(.title.bold())
.multilineTextAlignment(.leading)
if #available(iOS 17.0, *) {
.foregroundStyle(.red)
} else {
.foregroundColor(.red)
}
Run Code Online (Sandbox Code Playgroud)
PS:我见过这样的帖子来实现一个以 bool 作为输入的自定义修饰符,但它不能以编译器可以理解的方式获取操作系统版本,例如#available(iOS 17.0, *)
.
我知道我们可以实现类似的操作系统检查,如下所示,但我正在以相同的通用方式寻找版本检查:
Text("Hello World")
.font(.title.bold())
.multilineTextAlignment(.leading)
#if os(iOS)
.foregroundStyle(.red)
#else
.foregroundColor(.red)
Run Code Online (Sandbox Code Playgroud)
感谢您考虑我的问题