Deteksi rotasi di subkelas UIInputViewController. Ekstensi papan ketik

Saya telah mengembangkan ekstensi keyboard khusus dan saya perlu memperbarui beberapa batasan secara terprogram setelah perangkat diputar. Saya telah mencoba mendeteksi rotasi antarmuka pengguna di subkelas UIInputViewController saya tetapi tidak berhasil. Metode ini tidak dipanggil saat perangkat berputar:

-(void)willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>) coordinator { NSLog(@"Orientation changed"); }

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { NSLog(@"Orientation changed"); }

Saya juga sudah mencoba mengamati UIDeviceOrientationDidChangeNotification tetapi tidak berhasil juga.

Adakah yang tahu cara mendeteksi rotasi di UIInputViewController?


person Guferos    schedule 27.09.2014    source sumber
comment
Di IOS10 viewWillTransitionToSize dipicu di UIInputViewController.   -  person EckhardN    schedule 15.04.2018


Jawaban (3)


Anda benar - metode tersebut tidak dipanggil di subkelas UIInputViewController untuk Ekstensi Keyboard (tidak yakin tentang jenis ekstensi lainnya).

Anda perlu mengganti viewDidLayoutSubviews.

Misalnya, jika Anda ingin memperbarui tata letak subview UICollectionView keyboard Anda saat perangkat berputar, Anda akan melakukan sesuatu seperti ini:

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    [self.keyboard.collectionView performBatchUpdates:nil completion:nil];
}

Dalam kasus Anda, Anda dapat memeriksa orientasi perangkat di viewDidLayoutSubviews, dan kemudian menerapkan/memodifikasi batasan dengan tepat.

person siburb    schedule 03.10.2014

Swift 4.2

  override func didRotate(from fromInterfaceOrientation: UIInterfaceOrientation) {        
       let screen = UIScreen.main.bounds
        if screen.width < screen.height {
            print("!!! portrait")
        } else {
            print("!!! landspace")
        }
     }
person Ahmadreza    schedule 03.12.2018

Sepertinya Apple tidak menyediakan metode API ini ke UIInputViewController.

Anda dapat menyimpulkan orientasi perangkat jika lebar perangkat lebih besar dari tinggi perangkat di viewWillAppear

person nurnachman    schedule 03.10.2014