停止MCBrowserViewController旋转。忽略plist&赢得了子类

时间:2018-01-31 09:36:53

标签: ios xcode uiviewcontroller orientation multipeer-connectivity

我希望多人连接点对等选择器视图启动&像应用程序中的其他所有内容一样保持景观。

plist具有" 支持的界面方向"仅包含" 风景(右主页按钮)",但MCBrowserViewController忽略它。

我尝试将子类化为override supportedInterfaceOrientations,但根据此link,它并不支持此功能。适用于presentViewController的{​​{1}}提供:

MCBrowserViewController

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我编写了一个非常基本的示例应用程序,并使用iOS 11.2对其进行了测试。对我来说,MCBrowserViewController似乎遵守了应用级别的方向限制。

您应该通过提供application(_:supportedInterfaceOrientationsFor:)的实施来检查您的应用委托是否未覆盖plist方向值。或者,如果您有UIApplication的自定义子类,请确保它不会覆盖supportedInterfaceOrientations(for:)

我在这里包括完整的来源:

ViewController.swift:

import UIKit
import MultipeerConnectivity

class ViewController: UIViewController {

    var textField: UITextField?
    let id = MCPeerID(displayName: "testpeer")
    lazy var session = MCSession(peer: id)

    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton(frame: CGRect(x: 100, y: 100, width: 0, height: 0))
        button.setTitle("Browse", for: .normal)
        button.backgroundColor = .red
        button.addTarget(self, action: #selector(showBrowser), for: .touchUpInside)
        button.sizeToFit()
        view.addSubview(button)
    }

    @objc func showBrowser() {
        let controller = MCBrowserViewController(serviceType: "test", session: session)
        present(controller, animated: true)
        controller.delegate = self
    }
}

extension ViewController: MCBrowserViewControllerDelegate {

    func browserViewControllerDidFinish(_ browserViewController: MCBrowserViewController) {
        self.presentedViewController?.dismiss(animated: true)
    }

    func browserViewControllerWasCancelled(_ browserViewController: MCBrowserViewController) {
        self.presentedViewController?.dismiss(animated: true)
    }
}

AppDelegate.swift:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        return true
    }
}

的Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>UILaunchStoryboardName</key>
    <string>LaunchScreen</string>
    <key>UIMainStoryboardFile</key>
    <string>Main</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>armv7</string>
    </array>
    <key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
</dict>
</plist>