平板电脑上的iOS应用程序强制环境,在具有相同版本的手机上强制纵向

时间:2015-12-11 14:15:07

标签: ios iphone xcode swift ipad

我有一个可在所有手机和平板电脑上运行的Swift iOS应用程序。 我想为所有设备使用相同的代码库和IPA文件。 在手机上应用程序应该是肖像。 在平板电脑上应用应该是风景。

如果您的方向正确,我可以让它不允许旋转,但如果您在设备方向错误时启动应用程序,它将以错误的方向从应用程序开始并强制您进行物理旋转手机来解决它,即使这样屏幕搞砸了。

在常规:部署信息:设备方向:我同时检查了纵向和横向

请注意,这与已经提出的其他问题相似,但我无法找到我的特殊情况。

我在所有View Controllers中使用此代码,以防止旋转,如果您已经在正确的方向:

    override func shouldAutorotate() -> Bool
{
    let orientation:UIDeviceOrientation = UIDevice.currentDevice().orientation

    print(orientation)

    if(UIDevice.currentDevice().userInterfaceIdiom == .Phone)
    {
        if(orientation.isLandscape)
        {
            return true
        }
    }
    else
    {
        if(orientation.isPortrait)
        {
            return true
        }

    }

    return false
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask
{
    if(UIDevice.currentDevice().userInterfaceIdiom == .Phone)
    {
        return UIInterfaceOrientationMask.Portrait
    }
    else
    {
        return UIInterfaceOrientationMask.Landscape
    }
}

2 个答案:

答案 0 :(得分:5)

简单的方法是删除plist中的约束,这是图像中所示不需要的,我希望ipad只显示应用程序的potrait版本,因为它在iphone中看起来所以我只保留了肖像(底部的家按钮enter image description here

答案 1 :(得分:1)

我使用的代码会将方向更改为我想要VC的方向。

Frist我有这个结构。

struct Device {

// MARK: - Singletons

static var TheCurrentDevice: UIDevice {
    struct Singleton {
        static let device = UIDevice.currentDevice()
    }
    return Singleton.device
}


static var TheCurrentDeviceHeight: CGFloat {
    struct Singleton {
        static let height = UIScreen.mainScreen().bounds.size.height
    }
    return Singleton.height
}

// MARK: - Device Idiom Checks

static var PHONE_OR_PAD: String {
    if isPhone() {
        return "iPhone"
    } else if isPad() {
        return "iPad"
    }
    return "Not iPhone nor iPad"
}

static var DEBUG_OR_RELEASE: String {
    #if DEBUG
        return "Debug"
    #else
        return "Release"
    #endif
}

static var SIMULATOR_OR_DEVICE: String {
    #if (arch(i386) || arch(x86_64)) && os(iOS)
        return "Simulator"
    #else
        return "Device"
    #endif
}



static func isPhone() -> Bool {
    return TheCurrentDevice.userInterfaceIdiom == .Phone
}

static func isPad() -> Bool {
    return TheCurrentDevice.userInterfaceIdiom == .Pad
}

static func isDebug() -> Bool {
    return DEBUG_OR_RELEASE == "Debug"
}

static func isRelease() -> Bool {
    return DEBUG_OR_RELEASE == "Release"
}

static func isSimulator() -> Bool {
    return SIMULATOR_OR_DEVICE == "Simulator"
}

static func isDevice() -> Bool {
    return SIMULATOR_OR_DEVICE == "Device"
 }


}

然后在我要控制的VC veiwdidload中,我使用了这段代码。

    override func viewDidload() {
        let CD = Device.PHONE_OR_PAD
        if CD == "iPhone" {
           let value = UIInterfaceOrientation.Portrait.rawValue
           UIDevice.currentDevice().setValue(value, forKey: "orientation")
           shouldAutorotate()
       }
   }

    override func shouldAutorotate() -> Bool {
    switch UIDevice.currentDevice().orientation {
    case .Portrait, .PortraitUpsideDown, .Unknown:
        return true
    default:
        return false
    }
}

希望这有帮助。