我有一个简单的 TextField 代码,它有框架和背景,文本从中心领先开始,我希望它从顶部领先开始,我该怎么做?谢谢
import SwiftUI
struct ContentView: View {
@State private var stringOfText: String = "Hello, world!"
var body: some View {
TextField("", text: $stringOfText)
.frame(width: 300, height: 200, alignment: .center)
.background(Color.yellow)
}
}
Run Code Online (Sandbox Code Playgroud)
我想制作一个Generic PreferenceKey,但我的代码有两个问题。
首先,我需要为T定义(),以便使用String、Int作为String()或Int()等普通类型,因此我需要T的成员初始化程序。
第二个 Xcode 抱怨我的PreferenceKey不符合Equatable,而我做到了! <T:可等量>
我该如何解决这2个问题?谢谢
struct ContentView: View {
@State private var stringOfText: String = "Hello, world!"
var body: some View {
Text(stringOfText)
.preference(key: CustomPreferenceKey.self, value: stringOfText)
.onPreferenceChange(CustomPreferenceKey.self) { newValue in print(newValue) }
}
}
Run Code Online (Sandbox Code Playgroud)
struct CustomPreferenceKey<T: Equatable>: PreferenceKey {
static var defaultValue: T { get { return T() } }
static func reduce(value: inout …Run Code Online (Sandbox Code Playgroud) 我使用这个简单的代码从 Temp 目录加载图像
struct AddNewMedia: View {
@State var filename:String
func imageFullPath(filename:String)->UIImage {
let pathToTemoDir = FileManager.default.temporaryDirectory.appendingPathComponent(filename)
return UIImage(contentsOfFile: pathToTemoDir.path)!
}
var body: some View {
Image(uiImage: self.imageFullPath(filename: filename))
.resizable()
.scaledToFit()
}
}
Run Code Online (Sandbox Code Playgroud)
每个新图像都需要大量内存才能可视化。在这个项目中,我需要加载 20-30 个图像,因此我应该减少每个图像所需的内存,现在每个图像大约 23mb。
是否可以直接从图像路径加载图像而不将其添加到内存中?有什么建议么?非常感谢!
这是我非常简单的入门项目,正如您在问题标题中看到的那样,我想在 macOS SwiftUI 中的视图上悬停或移动时读取鼠标光标的位置。对于入门项目,我使用了手势!手势的问题在于,用户应该进行某种点击或拖动,这会触发手势,但我想获得手势的所有好处,而不必进行点击或拖动,我该怎么做?
struct ContentView: View {
@State private var location: CGPoint = .zero
var body: some View {
return VStack {
Spacer()
HStack {
Spacer()
Text("location is: ( \(location.x), \(location.y))").bold()
Spacer()
}
Spacer()
}
.background(Color.yellow)
.gesture(DragGesture(minimumDistance: 0, coordinateSpace: .local)
.onEnded { value in location = value.location })
}
}
Run Code Online (Sandbox Code Playgroud)
我想定义一个像 SwiftUI Primary Color 这样的颜色!现在我正在解决我的问题,并在代码中colorScheme使用类似的方法:if
struct ContentView: View {
var body: some View {
CustomPrimaryView()
.frame(width: 100, height: 100)
.cornerRadius(10)
Color.primary
.frame(width: 100, height: 100)
.cornerRadius(10)
}
}
Run Code Online (Sandbox Code Playgroud)
struct CustomPrimaryView: View {
@Environment(\.colorScheme)
var colorScheme
var body: some View {
colorScheme == .light ?
Color(red: 0.1, green: 0.1, blue: 0.1) :
Color(red: 0.95, green: 0.95, blue: 0.95)
}
}
Run Code Online (Sandbox Code Playgroud)
我想定义一个 customPrimary Color 并将其作为颜色而不是视图来访问,它动态地完成我在该视图中所做的工作。我们如何在 SwiftUI 中做到这一点?
我有一个符合 Decodable 的 CustomType,当我想将它用作我的函数所需的值时,Xcode 抱怨 CustomType 不符合 Decodable!我应该明确地使 CustomType 构造发生,我也这样做了,但它没有解决问题!我在这里缺少什么?
错误:
类型“CustomType.Type”不能符合“Decodable”
let stringOfJSON: String = """
{ "name": "SwiftPunk", "age": 35 }
"""
let dataOfJSON: Data? = stringOfJSON.data(using: String.Encoding.utf8)
Run Code Online (Sandbox Code Playgroud)
struct CustomType: Decodable {
enum Codingkeys: String, CodingKey {
case name, age
}
var name: String
var age: Int
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: Codingkeys.self)
name = try container.decode(String.self, forKey: .name)
age = try container.decode(Int.self, forKey: .age)
}
}
Run Code Online (Sandbox Code Playgroud)
func decoderFunction<T: Decodable>(dataOfJSON: Data?, customType: T, …Run Code Online (Sandbox Code Playgroud) 我有一个与索引一起使用的 ForEach 循环,我如何使这个 ForEach 步骤获得自定义步骤,因为在每个循环中的 ForEach 中,它将向索引添加一个,我们如何使步骤为 5,这意味着在每个循环中添加 5 而不是 1。我可以使用 if 和 % 来实现,但我不希望 ForEach 尝试每个 Items 中的每个 Item。我们如何才能使其高效编码?
代码:
struct ContentView: View
{
var body: some View
{
List
{
ForEach(0 ..< 21) { index in // (Step == 5) not 1
Text("Hello, world!")
.padding()
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有 CustomContentView(),我喜欢给它一个像 {} 这样的空内容作为默认值,在用例中我不必这样做,例如我对 Color 做了同样的事情!
更多信息:答案可以解决问题,无需使用 ViewBuilder,甚至无需将 CustomContentView 转换为功能,一切都可以,直到我们能够根据需要提供内容!
struct ContentView: View {
var body: some View {
CustomContentView(content: { Text("hello") })
CustomContentView(content: { })
// I like this one: CustomContentView() How can I do this?
}
}
Run Code Online (Sandbox Code Playgroud)
struct CustomContentView<Content: View>: View {
let content: () -> Content
let color: Color
init( @ViewBuilder content: @escaping () -> Content, color: Color = Color.red) {
self.content = content
self.color = color
}
var body: some View {
ZStack {
Rectangle() …Run Code Online (Sandbox Code Playgroud) 我想扩展 SwiftUI.Button,以便我可以添加一个 type 属性并将该类型更改为不同类型的主题按钮。但我是 Swift 新手,我不知道如何让我的标签和动作道具变得通用。
换句话说,如果我这样做
import SwiftUI
struct Button: View {
var type: String = ""
var action = {}
var label = {
Text("Button")
}
var body: some View {
ZStack(content: {
SwiftUI.Button(action: action, label: label)
})
}
}
Run Code Online (Sandbox Code Playgroud)
它将闭包限制为仅允许标签返回 text()
如何才能做到这一点
还有关于我应该如何根据类型更改按钮的“更改”的任何建议。
注意:有人对此表示反对,因为它类似于来自另一个用户的按钮样式查询,但事实并非如此。
该解决方案只是将预制样式添加到默认的 SwiftUI.button 结构中,但这不是我的目标。
我正在尝试使用可以传递的类型属性来扩展 SwiftUI.Button,并将根据该输入设置样式。
尽管他们有着相同的结果,但他们并没有实现相同的目标。我的解决方案将提供一个动态样式的组件,可以在整个项目中使用。无需尾随.buttonStyle(BlueButtonStyle())