IOS 26 Spacer funktioniert nicht in der Tastatursymbolleiste (funktionierte aber unter iOS 18)IOS

Programmierung für iOS
Anonymous
 IOS 26 Spacer funktioniert nicht in der Tastatursymbolleiste (funktionierte aber unter iOS 18)

Post by Anonymous »

Ich muss ein paar Text- und Bildschaltflächen in der Tastatursymbolleiste anordnen und möchte Abstandshalter einfügen, um sie gleichmäßig anzuordnen. Dies funktionierte unter iOS 18. Unter iOS 26 ist jedoch alles unübersichtlich. Siehe Bild:
Image

Hier ist eine minimale Reproduktion, mit der Sie herumspielen können:

Code: Select all

import SwiftUI

struct ContentView: View {
@State var text: String = ""
var body: some View {
NavigationStack {
List {
TextField("Click Me", text: $text)

Text("Hello, world!").font(Font.system(size: 32))
Text("Hello, world!").font(Font.system(size: 32))
Text("Hello, world!").font(Font.system(size: 32))
Text("Hello, world!").font(Font.system(size: 32))
Text("Hello, world!").font(Font.system(size: 32))
}
.toolbar {
ToolbarItemGroup(placement: .topBarLeading) {
Button {

} label: {
Text("Toggle")
}
}
}
.toolbar {
ToolbarItemGroup(placement: .keyboard) {
keyboardButtons
}
}
}
.navigationTitle("Hello")
}

@ViewBuilder
private var keyboardButtons: some View {

HStack {
SUITextButton("Button") {}
Spacer()

SUIImageButton(
image: UIImage(
systemName: "chevron.left",
withConfiguration: UIImage.SymbolConfiguration(pointSize: 32, weight: .regular, scale: .small)
)!,
enabled: true
) {}

Spacer()

SUIImageButton(
image: UIImage(
systemName: "chevron.right",
withConfiguration: UIImage.SymbolConfiguration(pointSize: 32, weight: .regular, scale: .small)
)!,
enabled: true
) {}

Spacer()
SUITextButton("Button") {}
}
}
}

#Preview {
ContentView()
}

public struct SUITextButton: View {

private let title: String
private let action: () -> Void
private let enabled: Bool

public init(_ title: String, enabled: Bool = true, action: @escaping () -> Void) {
self.title = title
self.enabled = enabled
self.action = action
}

public var body: some View {
Button(title, action: action)
}
}

public struct SUIImageButton: View {

public init(image: UIImage, enabled: Bool, action: @escaping () -> Void) {
self.image = image
self.enabled = enabled
self.action = action
}

private let image: UIImage
private let enabled: Bool
private let action: () -> Void

public var body: some View {
Button(action: action) {
SUIImage(
uiImage: image,
// Since it's inside of a button, it will be blue when enabled, and gray when disabled.
rendering: .systemTint)
}
}

}

public struct SUIImage: View {

public enum Rendering {
case systemTint
case customColor(color: UIColor)
case original
}

private let uiImage: UIImage
private let rendering: Rendering

public init(uiImage: UIImage, rendering: Rendering) {
self.uiImage = uiImage
self.rendering = rendering
}

public var body: some View {

let width: CGFloat = 18.0 + (2.0 / 3.0)
let height: CGFloat = 26.0 + (2.0 / 3.0)

Image(uiImage: uiImage)
.renderingMode(.template)
}
}

Das Setzen des UIDesignRequriesCompatibility-Flags hat funktioniert, aber ich benötige einen Glaseffekt für andere Teile meiner App (und ich denke, dass es mit dem Glaseffekt über der Tastatur besser aussieht). Das ist also keine Option.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post