IPadOS 26 kann in verschiedenen VCs keine unterschiedlichen Ausrichtungen festlegen (funktionierte auf iPadOS 18 und aufIOS

Programmierung für iOS
Anonymous
 IPadOS 26 kann in verschiedenen VCs keine unterschiedlichen Ausrichtungen festlegen (funktionierte auf iPadOS 18 und auf

Post by Anonymous »

Ich habe eine Heim-VC, die im Hochformat sein sollte, dann kann sie eine Spiele-VC im Querformat pushen. Ich muss die Benutzeroberfläche dazu zwingen, sich ins Querformat zu drehen, wenn ich die Spiel-VC drücke, und dann wieder ins Hochformat zu drehen, wenn ich zur Start-VC zurückkehre (ich bin offen für andere UI-Flows, solange sich die Spiel-VC im Querformat befindet, damit das Gyroskop funktioniert).
Zuvor konnte ich das erreichen durch:

Code: Select all

class AppDelegate {

public var orientationLock: UIInterfaceOrientationMask = .all
public func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return orientationLock
}
}

public enum ScreenUtil {
public static func forceOrientation(_ mask: UIInterfaceOrientationMask) {
let delegate = UIApplication.shared.delegate as! AppAppDelegate
delegate.orientationLock = mask
windowScene?.requestGeometryUpdate(.iOS(interfaceOrientations: mask))
NAV_VC?.setNeedsUpdateOfSupportedInterfaceOrientations()
}
}
Dann in meiner Ansicht Controller:

Code: Select all

open class MyVC: UIViewController {
private let supportedOrientationGetter: () -> UIInterfaceOrientationMask

open override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
ScreenUtil.forceOrientation(supportedOrientationGetter())
}
}
Und dann entscheidet die Unterklasse von MyVC, welche Ausrichtung der Bildschirm haben soll.
Beachten Sie, dass dieser Code das Flag UIRequiresFullScreen = YES in Info.plist erfordert und außerdem die Schnittstellenausrichtungen in Info.plist nur .portrait enthalten, was ein Dummy-Wert ist. Die tatsächliche Ausrichtung wird im obigen Code festgelegt.
Dieser Code funktionierte zuvor gut, schlägt jedoch unter iPadOS 26 fehl (iPhone funktioniert immer noch). Auch UIRequiresFullScreen ist veraltet, daher möchte es trotzdem entfernt werden. Und wenn ich UIRequiresFullScreen entferne, erhalte ich eine Warnung, dass ich alle Ausrichtungen auf dem iPad unterstützen muss, daher ist das korrekte Setup auf iPadOS 26:
  • UIRequiresFullScreen = NO (da es veraltet ist)
  • Unterstützte Schnittstellenausrichtungen enthalten alle (da die Warnung oben besprochen wurde)
Ich habe die befolgt Anweisung aus dem Verfallshinweis von UIRequiresFullScreen. Dies habe ich mit der API „prefersInterfaceOrientationLocked“ und „supportedInterfaceOrientations“ versucht, aber es hat nicht funktioniert.
Im Beispiel unten habe ich eine ViewController-Klasse, die im Hochformat sein sollte, und sie wird dann an eine LandscapeVC-Klasse weitergeleitet, die im Querformat sein sollte.

Code: Select all

import UIKit

class ViewController: UIViewController {

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
}

override var prefersInterfaceOrientationLocked: Bool {
true
}

override func viewDidLoad() {
super.viewDidLoad()

navigationItem.title = "Hello"

let item = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(clicked))
navigationItem.rightBarButtonItem = item
}

@objc
func clicked() {
let vc = LandscapeVC()
self.navigationController!.pushViewController(vc, animated: true)
}
}

class LandscapeVC: UIViewController {

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscape
}

override var prefersInterfaceOrientationLocked: Bool {
true
}

}
Außerdem etwas zusätzlicher Kontext dazu, warum ich für diesen speziellen Bildschirm Querformat benötige – weil es sich um ein Querformat-Minispiel handelt, das Gyroskop verwendet. Für den Rest der App funktioniert jede Ausrichtung, aber für dieses Minispiel muss ich das Querformat festlegen.
Im Migrationsdokument von Apple wird auch ein „Fahrspiel“ behandelt, das Gyroskop verwendet, also ist dies definitiv möglich. Ich bin offen für andere UI-Flows (z. B. das Minispiel-VC präsentieren oder ein neues Fenster für das Minispiel erstellen oder was auch immer möglich ist, solange die Ausrichtung auf Querformat festgelegt ist, damit das Gyroskop funktioniert)
Hinweis: Ich habe dies bei einer anderen Frage gesehen, aber sie funktioniert nicht auf iPadOS 26, das Szenenunterstützung bietet.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post