我想TextEditor在我的 ForEach 中有一些,我在 down 中制作了这个示例代码!正如您在 Image 中看到的代码和结果,它TextEditor就像一个贪婪的视图,并占用所有可用空间!至少对我来说有很多缺点!
如果我将高度限制为自定义值,那么我将失去查看 TextEditor 本身的所有字符串和字符串行的可能性,并且我必须向上或向下滚动才能看到其他行,这不是我的设计!
我的目标是占用TextEditor所需的空间,如果我输入新的字符串行,那么它的高度可以增加,或者如果我删除字符串行,它的高度可以缩小到至少 1 行!
我想知道我该怎么做?
struct ContentView: View {
@StateObject var textEditorReferenceType: TextEditorReferenceType = TextEditorReferenceType()
var body: some View {
Text("TextEditorView").bold().padding()
VStack {
ForEach(textEditorReferenceType.arrayOfString.indices, id: \.self, content: { index in
TextEditorView(string: $textEditorReferenceType.arrayOfString[index])
})
}
.padding()
}
}
struct TextEditorView: View {
@Binding var string: String
var body: some View {
TextEditor(text: $string)
.cornerRadius(10.0)
.shadow(radius: 1.0)
}
}
class TextEditorReferenceType: ObservableObject {
@Published var arrayOfString: [String] …Run Code Online (Sandbox Code Playgroud) 我在 SwiftUI 中修剪后使用描边边界时遇到困难,该怎么办?
\nCircle()\n .trim(from: 0, to: 0.5)\n .strokeBorder(Color.red, style: StrokeStyle(lineWidth: 50.0, lineCap: .round, lineJoin: .round))\nRun Code Online (Sandbox Code Playgroud)\n错误:
\n\n\n类型“some Shape”的值没有成员“strikeBorder”
\n
\xe2\x9a\xa0\xef\xb8\x8f 至少还有 2 种其他方法可以得到像strokeBorder给出的结果。但他们不使用strokeBorder,我想在使用时解决问题strokeBorder。
我正在开发一个项目,用于删除最大化、最小化和关闭按钮,我们可以在SwiftUI 生命周期中使用 Xcode for macOS构建的每个应用程序/项目的每个窗口中看到这些按钮。我怎么能这样做呢?
PS:请考虑我正在SwiftUI 生命周期/macOS上进行编码,如果您的代码或方式与其不兼容,那么我将无法使用它。感谢您的帮助和您的时间。
更新,日期 2022 年 3 月 5 日: 问题仍然悬而未决,正在寻找 SwiftUI 方法。您可以使用 SwiftUI api 来回答这个问题。
当我使用rotation3DEffect时,有时值会变成90或-90度,这正是我计划的,一旦我的度数达到90或-90,我就会在控制台中看到这样的按摩:
ignoring singular matrix: ProjectionTransform(m11: 1.0, m12: 0.0, m13: 0.0, m21: -0.125, m22: -0.25, m23: -0.0025, m31: 12.5, m32: 125.0, m33: 1.25)
Run Code Online (Sandbox Code Playgroud)
我知道这是因为 90 或 -90 度,我想知道我应该对这种按摩做出反应还是干脆忽略它?考虑到这一点,我的应用程序获得 90 或 -90 没有问题。
重新创建按摩的代码:
struct ContentView: View {
var body: some View {
Rectangle()
.fill(Color.red)
.frame(width: 100, height: 200, alignment: .center)
.rotation3DEffect(
Angle(degrees: 90),
axis: (x: 1.0, y: 0.0, z: 0.0),
anchor: .center,
anchorZ: 0.0,
perspective: 0.5)
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 EquatableView 作为我的视图,但 SwiftUI 不使用我的 == 函数,看来我做的一切都是正确的,但不起作用,需要帮助。我想使用 == 函数来阻止 SwiftUI 进行不必要的渲染,但它每次都会渲染并且不使用给定的函数,为什么?
import SwiftUI
extension Int { var isEven: Bool { return self % 2 == 0 } }
Run Code Online (Sandbox Code Playgroud)
struct ContentView: View {
@State private var number = 3
var body: some View {
VStack {
// EquatableView ( content: NumberView(number: number) ) // <<: Here
// NumberView(number: number).equatable() // <<: Or Here
Button("New Random Number") {
number = Int.random(in: 1...100)
}
Text(number.description).bold().padding()
}
}
}
Run Code Online (Sandbox Code Playgroud)
struct NumberView: View, Equatable { …Run Code Online (Sandbox Code Playgroud) 我有一个测试代码来显示这个问题,当我使用matchedGeometryEffect时,matchedGeometryEffect向渲染结果添加了不希望的淡入淡出效果,所以我喜欢删除这种淡入淡出效果甚至控制它。当我将视图颜色从一种颜色更改为另一种颜色时,这可能是一件好事,但就我而言,这并不好,因为颜色始终是黑色。
struct ContentView: View {
@Namespace var animationNamespaceon
@State private var start: Bool = Bool()
var body: some View {
VStack {
Spacer()
circle
Spacer()
Button("update") { start.toggle() }
}
.animation(Animation.linear(duration: 3), value: start)
}
@ViewBuilder var circle: some View {
if start {
Circle()
.foregroundColor(Color.black)
.matchedGeometryEffect(id: "Circle", in: animationNamespaceon)
.frame(width: 300, height: 300)
}
else {
Circle()
.foregroundColor(Color.black)
.matchedGeometryEffect(id: "Circle", in: animationNamespaceon)
.frame(width: 50, height: 50)
}
}
}
Run Code Online (Sandbox Code Playgroud) ColorPicker默认的按钮样式是圆形,如下所示。
\n\n我想将圆形按钮的样式更改为矩形。但似乎没有 API 可以改变它的风格。所以我在它上面放了一个矩形,并将它的 allowedHitTesting 设置为 false 以将单击事件传输到 ColorPicker。
\n\nstruct ColorPickerView: View {\n @State private var colorValue = Color.orange\n var body: some View {\n ZStack() {\n ColorPicker("", selection: $colorValue)\n .labelsHidden()\n Rectangle()\n .foregroundColor(.blue)\n .frame(width: 40, height: 40, alignment: .center)\n .allowsHitTesting(false)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n但是点击后ColorPicker没有出现。
\n我在矩形下面画了一个圆圈来测试 allowedHitTesting 是否有用。它可以正常响应点击手势打印“Circle tapped!”。
\nstruct ColorPickerView: View {\n @State private var colorValue = Color.orange\n var body: some View {\n ZStack() {\n ColorPicker("", selection: $colorValue)\n .labelsHidden()\n Rectangle()\n .foregroundColor(.blue)\n .frame(width: 40, height: 40, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 SwiftUI 中的应用程序上添加全屏视图。这样做的目的是要有一个淡入的“阴影”,使屏幕变暗并将焦点集中到自定义弹出窗口,从而禁用背景中的内容。请参阅下面的视觉示例:
我试图添加此阴影的视图嵌入在复杂的 NavigationView 堆栈中(几层深,通过 a 访问NavigationLink),并且还有一个可见的 TabBar。到目前为止,我已经尝试将NavigationViewa 嵌入ZStack并在顶部添加 aRectangle()但无济于事,NavigationBar 和 TabBar 仍然位于此视图的顶部。我也尝试过使用修饰符,.zIndex()但这似乎没有任何作用。
任何帮助深表感谢,
谢谢
我正在使用 SwiftUI 构建一个选择器。
现在我想为每个选择添加一个图标和文本。所以它应该看起来像这样:
这可能吗?如果是的话怎么办?
或者苹果人机界面指南根本不推荐它?
我已经尝试使用 HStack 将图像和文本包装在一起。
enum Category: String, CaseIterable, Identifiable {
case person
case more
var id: String { self.rawValue }
}
struct ContentView: View {
@State private var category = Category.person
var body: some View {
Picker("Category", selection: $category) {
HStack {
Image(systemName: "person")
Text("Person")
}.tag(Category.person)
HStack {
Image(systemName: "ellipsis.circle")
Text("More")
}.tag(Category.more)
}.pickerStyle(SegmentedPickerStyle())
.padding()
}
}
Run Code Online (Sandbox Code Playgroud)
但该框架将其分为四部分。