当前位置: 首页 > 知识库问答 >
问题:

只有一种视图横向模式

叶国兴
2023-03-14

我完成了我的iOS应用程序,但我只需要将一个视图设置为横向模式,其余的视图只能在竖屏中看到。

我使用的是Xcode 5.1,我通过从右侧面板中插入情节提要视图控制器创建了所有视图,因此如果您要告诉我在什么地方编写代码,请确切告诉我需要在哪里编写。

我在这里读到了一个解决方案UINavigationController强制旋转,但我不知道该在哪里编写代码。是否需要手动创建一个UIViewController?

共有3个答案

卜泓
2023-03-14

SWIFT4

将以下代码行添加到AppDelegate

var orientationLock = UIInterfaceOrientationMask.portrait
        
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
  return self.orientationLock
}
        
struct AppUtility {
  static func lockOrientation(_ orientation: UIInterfaceOrientationMask) {
    if let delegate = UIApplication.shared.delegate as? AppDelegate {
      delegate.orientationLock = orientation
    }
  }
            
  static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) {
    self.lockOrientation(orientation)
    UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation")
  }
}

向要横向移动的控制器添加以下代码

override func viewDidLoad() {
  super.viewDidLoad()
}
        
override func viewWillAppear(_ animated: Bool) {
  AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.landscapeRight, andRotateTo: UIInterfaceOrientation.landscapeRight)
}
    
override func viewWillDisappear(_ animated : Bool) {
  super.viewWillDisappear(animated)
  AppDelegate.AppUtility.lockOrientation(UIInterfaceOrientationMask.portrait, andRotateTo: UIInterfaceOrientation.portrait)
}
章晗日
2023-03-14

我想你的目标是iOS 7(使用XCode 5.1,我想我是对的)。

首先,你必须明白,为了在40多个横向视图中只打开一个视图,你的应用程序应该允许横向和纵向界面方向。默认情况下是这样,但您可以在目标的设置、常规选项卡、部署信息部分进行检查(请参见下面的屏幕截图)。

然后,由于您允许整个应用程序同时使用横向和纵向,因此您必须告诉每个纵向仅UIViewController,它不应自动旋转,并添加此方法的实现:

- (BOOL)shouldAutorotate {
  return NO;
}

最后,对于特定的纯横向控制器,由于您说您是以模态方式呈现它,所以您可以实现以下方法:

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
  return UIInterfaceOrientationLandscapeLeft; // or Right of course
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
  return UIInterfaceOrientationMaskLandscape;
}

希望这会有所帮助,

丰誉
2023-03-14

AppDelegate.swift

internal var shouldRotate = false
func application(_ application: UIApplication,
                 supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return shouldRotate ? .allButUpsideDown : .portrait
}

您的景观视图控制器

let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.shouldRotate = true // or false to disable rotation

目标-C

应用代表. h

@属性(分配,非原子)BOOL应该旋转;

应用代表团

- (UIInterfaceOrientationMask)application:(UIApplication *)application
 supportedInterfaceOrientationsForWindow:(UIWindow *)window {
    return self.shouldRotate ? UIInterfaceOrientationMaskAllButUpsideDown
                             : UIInterfaceOrientationMaskPortrait;
}

您的景观视图控制器

AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate setShouldRotate:YES]; // or NO to disable rotation
 类似资料:
  • 问题内容: 我试图对我的应用程序强制使用“横向”模式,因为我的应用程序绝对不是针对“人像”模式设计的。我怎样才能做到这一点? 问题答案: 现在可以使用HTML5 Webapp清单。 见下文。 原始答案: 您不能将网站或Web应用程序锁定在特定方向。它违反了设备的自然行为。 您可以使用CSS3媒体查询来 检测 设备方向,如下所示: 或通过绑定JavaScript方向更改事件,如下所示: 2014年1

  • 我有一个电影视图压缩在右下视口与肖像模式。当用户展开电影视图时,电影视图将以横向模式扩展到全屏。我还想在全屏时将电影视图锁定为横向模式,无论设备的方向如何。 注意:我所有的其他视图都是竖屏的。 我用这个代码引用了这篇文章, 应用程序设置, AppDelegate。敏捷的 查看控制器, 日志 在设置方向之前,我将应旋转设置为true,这个make视图可以更改为横向模式。设置方向后,我将应旋转设置为f

  • 我想在一个容器中显示许多图像,但如果图像是横向的,它还不错,但如果图像是纵向的,当我插入它时,它会显示拉伸。它显示每一张图片景观,它不漂亮。我想显示每个图像,因为它的原始方向和容器的最大高度为415px。这是我的输出:风景图像纵向图像请帮助这是我的代码。

  • 我正在开发一个应用程序,当设备方向关闭时,我在横向模式下拍摄图像。我正在使用GPUImageStillCamera拍摄图像。但我在图像的旋转中遇到了问题。问题是,当我在关闭设备旋转的情况下以横向模式拍摄图像并保存在gallery中,然后打开设备旋转,图像必须随设备方向旋转。但是,当以纵向模式握住设备时,图像处于横向,如果将设备置于横向,图像旋转是向上向下的。 笔记 当设备旋转打开时,图像旋转效果非

  • 动态像scrollview中增添内容(demo中是增添图片)。当增添的图片超过视图宽度时,scrollview可以左右滚动查看完整内容。每增添一张图片,增加按钮会往左移动,清空所有图片后,按钮会滑动回原来的位置。 [Code4App.com]

  • 问题内容: 我试图在横向模式下仅强制应用程序中的一个视图, 该视图以纵向模式启动,并且在更改设备方向时保持旋转。 从不调用shouldAutorotate。 任何帮助,将不胜感激。 问题答案: 它对其他人可能有用,我找到了一种强制视图以横向模式启动的方法: 把它放在viewDidLoad()中: 和,