当我在 macOS 上输入(或粘贴)文本TextField并且字符串需要的空间比可用空间更多时,TextField我期望出现某种随文本光标移动的滚动行为 - 就像世界上几乎每个文本字段一样。相反,我只能看到文本的开头,而无法再看到我的新输入。我什至无法手动滚动。只有当我放大TextField然后再次缩小它时,我才能滚动它。看视频:
这是 SwiftUI 的错误吗?有任何已知的解决方案吗?
这是代码:
struct ContentView: View {
@State private var text: String = ""
var body: some View {
TextField("", text: $text)
.padding()
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试UIButton.Configuration在 iOS 15 中实现设计按钮,但在尝试设置突出显示状态的背景颜色时遇到了问题。我正在使用UIButton.ConfigurationUpdateHandler,它成功地更改了状态更改时的背景颜色:
let handler: UIButton.ConfigurationUpdateHandler = { button in
switch button.state {
case [.selected, .highlighted]:
button.configuration?.baseBackgroundColor = .buttonHighlightColor
case .selected:
button.configuration?.baseBackgroundColor = .buttonHighlightColor
case .highlighted:
button.configuration?.baseBackgroundColor = .buttonHighlightColor
case .disabled:
button.configuration?.baseBackgroundColor = .buttonDisabledColor
default:
button.configuration?.baseBackgroundColor = .buttonDefaultColor
}
}
Run Code Online (Sandbox Code Playgroud)
虽然背景颜色发生变化,但突出显示时按钮顶部似乎仍然有某种白色半透明覆盖层:
左边是按钮现在突出显示时的样子,右边是突出显示颜色应该是什么样子。
我首先认为这可能是因为按钮类型是系统,但即使使用自定义,问题仍然存在。使用之前从来没有遇到过这个问题UIButton.Configuration。有任何想法吗?
我在视图上使用.contextMenuwith .onDrag,这似乎非常棘手:
通过设置为 true,背景颜色变为灰色dragging。这是由.onDrag打开上下文菜单时已经发生的情况触发的(有点早但还可以)。当我使用按钮关闭菜单时,我可以设置dragging为 false。当我使用拖动时,取消初始化dragging时状态会更改回 false 。ItemProvider到目前为止,一切都很好。
问题
当我点击上下文菜单外部将其关闭时,我似乎无法将dragging状态设置回 false。添加.onDisappear到Button菜单中不起作用。
我在这里做错了什么?有什么方法可以在上下文菜单关闭时收到通知,或者在拖动实际开始时发生状态更改dragging(以便在打开上下文菜单时背景不会立即变为灰色)?
代码如下视频。
struct ContentView: View {
@State var dragging = false
var body: some View {
ZStack {
Rectangle()
.foregroundColor(.blue)
.frame(width: 100, height: 100)
.onDrag {
dragging = true
let provider = ItemProvider(contentsOf: URL(string: "Test")!)!
provider.didEnd = {
DispatchQueue.main.async {
dragging = false
}
}
print("init ItemProvider")
return provider …Run Code Online (Sandbox Code Playgroud) 当我初始化 CGColor 并将其转换为 UIColor 时,它的渲染方式与使用相同值初始化的 UIColor 不同。如何在 CGColor 和 UIColor 之间进行转换并保持相同的外观?
此代码产生两种略有不同的颜色(参见屏幕截图),尽管我希望颜色相同:
self.view.backgroundColor = UIColor(red: 19/255.0, green: 25/255.0, blue: 28/255.0, alpha: 1.0)
let myCGColor = CGColor(red: 19/255.0, green: 25/255.0, blue: 28/255.0, alpha: 1.0)
self.secondView.backgroundColor = UIColor(cgColor: myCGColor)
Run Code Online (Sandbox Code Playgroud)
无论当前的配色方案如何,是否可以在 SwiftUI 中强制使用深色或浅色材质?使用.preferredColorScheme会将配色方案应用于整个视图,而不仅仅是材质。原因是我正在使用,AVPlayer并且我需要覆盖额外的 UI,该 UI 应该与播放器 UI 的外观相匹配,该 UI 似乎总是使用深色材质。
我知道的唯一解决方法是UIBlurEffect通过 an 实现 an UIViewRepresentable,例如使用此包: https: //github.com/twostraws/VisualEffects
我正在尝试使用相同的颜色创建一个渐变,并在一端使用亮度修改器。我试过这个:
let gradient = LinearGradient(
colors: [Color.blue, Color.blue.brightness(0.1)],
startPoint: .top, endPoint: .bottom)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会编译并出现以下错误:Cannot convert value of type 'some View' to expected element type 'Array<Color>.ArrayLiteralElement' (aka 'Color')
根据这个线程,我预计它会起作用。我怎样才能解决这个问题?
我有一个可以拖动的圆角视图。开始拖动后,白色半透明背景视图将在角落可见。如何将其删除?
我尝试使用.contentShapeand.clipShape但这并不能解决问题。在 UIKit 中,我曾经UIDragPreviewParameters剪辑预览,但 SwiftUI 中似乎没有这样的东西。有任何想法吗?
代码:
RoundedRectangle(cornerRadius: 25, style: .continuous)
.foregroundColor(.blue)
.frame(width: 100, height: 100)
.contentShape(RoundedRectangle(cornerRadius: 25, style: .continuous))
.onDrag {
NSItemProvider()
}
Run Code Online (Sandbox Code Playgroud)