我正在学习SwiftUI。我遇到了“ GeometryReader”。我想知道为什么以及何时使用它?
在我的用例中,我必须将 a 放在 aTextField中的可用项目下方List,通过使用它TextField,我们可以将项目添加到List.
最初,没有列表项(items数组为空)
这是一个最小的、可重现的示例
import SwiftUI
struct ContentView: View {
@State var itemName = ""
@State var items = [String]()
var body: some View {
NavigationView {
List {
ForEach(self.items, id: \.self) {
Text($0)
}
VStack {
TextField("Item Name", text: $itemName)
.textFieldStyle(RoundedBorderTextFieldStyle())
Button(action: {
self.items.append(self.itemName)
self.itemName = ""
}) {
Text("Add Item")
}
}
}
.navigationBarTitle(Text("Title"))
}
}
}
Run Code Online (Sandbox Code Playgroud)

我们可以通过在 中键入一些内容TextField并单击“添加项目”来向列表中添加一个新项目Button,我们添加的每个项目都TextField …
您好,我是 SwiftUI 的新手,我正在使用标签 Image(“我的图像”),我的图像位于 Assets.xcassets 目录中,当我编辑时一切正常,但当我在 mac 中使用我的单元或模拟器进行测试时图像没有出现,我不明白为什么我的代码如此简单,如果可以告诉我谁显示完整的屏幕,因为如果我在屏幕中使用一些文本或文本字段,则不会出现在整个屏幕上,我不知道如何将屏幕向下移动。真的谢谢你帮助我。
\n我在 iPhone 7 上使用 iOS 13.4
\n
var body: some View {\n VStack {\n ZStack{\n Image("icon-logo")\n .resizable()\n .scaledToFit()\n .clipShape(Circle())\n .overlay(Circle().stroke(Color(red: 39 / 255, green: 113 / 255, blue: 233 / 255), lineWidth: 5))\n .shadow(radius: 20)\n \n }\n Text("Datos de Usuario")\n VStack{\n Text("Nombre")\n .offset(x: -140, y: 0)\n TextField("--Nombre--", text: /*@START_MENU_TOKEN@*//*@PLACEHOLDER=Value@*/.constant("")/*@END_MENU_TOKEN@*/)\n .offset(x: 20, y: 0)\n .padding(15)\n .background(Color(red: 242 / 255, green: 242 / 255, blue: 242 / 255))\n Text("Apellido")\n .offset(x: -140, y: …Run Code Online (Sandbox Code Playgroud) 在 iOS16 中,工作表内部存在键盘的错误,当工作表关闭时键盘消失(没关系),但布局未更新。我只看到了关于同一问题的 1 个问题,想知道也许有人找到了临时解决方法,直到苹果不解决这个问题。重现代码:
struct Test: View {
@State var isPresented: Bool = false
@State var text: String = ""
var body: some View {
VStack{
Button {
isPresented.toggle()
} label: {
Text("PRESENT")
}
}
.sheet(isPresented: $isPresented) {
ZStack {
Color.red
VStack{
TextField("Test", text: $text)
.frame(height: 50, alignment: .center)
Spacer()
Rectangle()
.fill(Color.blue)
.frame(width:300, height: 50)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
视频: https: //vimeo.com/758845068
我正在尝试使用在 SwiftUI 中为 UIKit 创建的 3rd 方库,例如,该BetterSegmentedControl库(https://github.com/gmarm/BetterSegmentedControl)需要一个 Selector 女巫采用一个objc函数来处理用户输入。
在 SwiftUI 中甚至有处理这个的方法吗?
struct ContentView : UIViewRepresentable {
func makeUIView(context: Context) -> BetterSegmentedControl {
BetterSegmentedControl()
}
func updateUIView(_ view: BetterSegmentedControl, context: Context) {
let control = BetterSegmentedControl(
frame: CGRect(x: 0, y: 0, width: 300, height: 44),
segments: LabelSegment.segments(withTitles: ["One", "Two", "Three"],
normalTextColor: .lightGray,
selectedTextColor: .white),
index: 1,
options: [.backgroundColor(.darkGray),
.indicatorViewBackgroundColor(.blue)])
view.addSubview(control)
@objc func controlValueChanged(_ sender: BetterSegmentedControl) {
}
control.addTarget(self, action: #selector(controlValueChanged(_:)), for: .valueChanged)
view.addSubview(control)
} …Run Code Online (Sandbox Code Playgroud) 键盘出现时如何显示完整的列表?键盘隐藏在列表的下部。
我的列表行中有一个textField。当键盘出现时,无法向下滚动以查看完整列表。键盘在列表的前面,而不在列表的“下面”。这是我的编码:
struct ContentView: View {
@State private var name = ""
var body: some View {
List {
VStack {
Text("Begin")
.frame(width: UIScreen.main.bounds.width)
.padding(.bottom, 400)
.background(Color.red)
TextField($name, placeholder: Text("enter text"), onEditingChanged: { _ in
//
}) {
//
}
Text("End")
.frame(width: UIScreen.main.bounds.width)
.padding(.top, 400)
.background(Color.green)
}
.listRowInsets(EdgeInsets())
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮我怎么做吗?
非常感谢你。
SwiftUI 中是否有等效于 InputAccessoryView 的东西(或任何迹象即将到来?)
如果没有,您将如何模拟 InputAccessoryView(即固定在键盘顶部的视图)的行为?所需的行为类似于 iMessage,其中有一个固定在屏幕底部的视图,当键盘打开时该视图会出现动画并直接位于键盘上方。例如:
我试图以编程方式滚动到的特定Y位置,ScrollView单击按钮时,如何设置ScrollView位置?
ScrollView {
Button(action: {
}) {
Text("Sign In").fontWeight(.heavy)
}
}
Run Code Online (Sandbox Code Playgroud)
我希望此按钮动作可以访问和更改ScrollView的位置。
当键盘出现时,视图被压缩而不是向上移动。它在纵向模式下按预期工作,该问题仅在横向模式下出现。附上照片以供澄清。我已经尝试过.edgesIgnoreSafeArea(),以及该线程上提出的解决方案。
VStack {
Text("\(titleText)")
.font(.system(size: 30))
.bold()
VStack {
Text("Item Title")
TextField("Item Title", text: $title)
.formStyle()
}
VStack {
Text("Item Description")
TextField("Item Description", text: $itemDescription)
//TextEditor(text: $itemDescription)
.formStyle()
}
VStack {
Text("Unit Type")
TextField("Each, Total, Hours, LF, etc...", text: $unitType)
.formStyle()
}
VStack {
Text("Unit Cost")
TextField("Cost per unit", text: $unitCost, onEditingChanged: { (isChanged) in
guard !unitCost.isEmpty else { return }
//Ensuring entered text can be converted to required double
if let _ = Double(unitCost) { …Run Code Online (Sandbox Code Playgroud) 我有这个
struct ContentView: View {
var body: some View {
ZStack(alignment: Alignment.bottom) {
List {
Text("Default text").foregroundColor(Color.red)
}
TextField("Placeholder", text: .constant(""))
.frame(minHeight: 30)
.cornerRadius(8.0)
.padding(10)
.background(Color.blue)
}
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,当我专注于 TextField 时,键盘会隐藏此文本字段。
SwiftUI 中是否有一个简单的解决方案可以使文本字段始终位于键盘顶部?
我试图通过将底部约束修改为键盘高度来显示键盘时的视图。但是返回给我的键盘高度是变化的。
当我点击模拟器中的文本字段时,键盘高度为302。当我尝试打开和关闭软件键盘时,它显示260何时出现键盘。为什么会这样呢?
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(FriendsViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
func keyboardWillShow(notification: NSNotification) {
print("Keyboard appearing")
guard let keyboardHeight = (notification.userInfo! as NSDictionary).objectForKey(UIKeyboardFrameBeginUserInfoKey)?.CGRectValue.size.height else {
return
}
bottomConstraint.constant = keyboardHeight
print("keyboard height : \(keyboardHeight)")
self.view.layoutIfNeeded()
}
Run Code Online (Sandbox Code Playgroud)
的高度260实际上是正确的高度,因为它完美地调整了我的视野。随着302我的观点高度偏移了太多。
我的观点的布局是。UITextField在顶部,然后在其UITableView下方。