【问题标题】:Interface Orientation, Stretching and Aspect Ratio界面方向、拉伸和纵横比
【发布时间】:2012-02-08 08:55:02
【问题描述】:
-  (BOOL)    shouldAutorotateToInterfaceOrientation 
          : (UIInterfaceOrientation)interfaceOrientation;

上述方法在让旋转发生方面按预期工作。但是我很难尝试在保持其纵横比的同时拉伸 UIView。

发生的情况是 UIView 在变为横向模式时水平拉伸,但无论我做什么它都不会垂直拉伸。事实上,它的高度在横向模式下缩小了很多。

在 IB 和代码中尝试了以下设置但没有用。

  • 在 IB 中,尝试过“Aspect Fit”、“Aspect Fill”和 Autosizing Box
  • 在代码中,尝试过“autosizingMask”和“setContentMode”

希望有人能帮忙...

或者,如果您做过/遇到过类似的事情,请留言。

编辑:

我想我从另一个 SO question 中找到了解决方案。发生的事情是我的代码与 IB 的 AutoResizing 功能的效果纠缠在一起。可以在我自己的答案中找到该问题的链接。

【问题讨论】:

  • 以下链接中已包含此内容 - stackoverflow.com/questions/2325795/…
  • 感谢您的评论。它可能不适用于我的情况,因为我的 UIView 是在 IB 中创建的。但我会试一试...
  • 不幸的是,问题 2325765 的解决方案对我不起作用。应用 autoresizingMask 后,图像会进一步缩小。

标签: iphone cocoa-touch


【解决方案1】:

首先,内容模式(使用setContentMode: 设置或通过在 IB 中更改视图的模式)对您没有用处,因为它控制的是视图内容的响应大小的变化——它不控制实际的大小变化。此外,除非您将其设置为 UIViewContentModeRedraw,否则内容不会被重绘,而只是移动或拉伸,这通常不是您想要的。

另一方面,设置自动调整大小的掩码(或使用 IB 中的自动调整大小框)也不能满足您的需求。 UIViewAutoresizingFlexibleWidth 将根据其父视图大小的变化成比例地更改视图的宽度(此外使用UIViewAutoresizingFlexibleLeftMargin 和/或UIViewAutoresizingFlexibleLeftMargin 将控制到屏幕两侧的距离是否保持不变)。但是自动调整大小的掩码并没有给你一种方法来改变高度基于宽度的变化:你可以让它与超级视图的高度成比例地变化和/或坚持顶部/底部.

因此,您必须自己在willRotateToInterfaceOrientation:duration: 中以编程方式管理调整大小。比如:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    CGRect rectToResizeTo;

    if ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) {
        rectToResizeTo = CGRectMake(x1, y1, width1, height1);
    } else {
        rectToResizeTo = CGRectMake(x2, y2, width2, height2);
    }
    [UIView animateWithDuration:duration animations:^{
        self.viewToResize.frame = rectToResizeTo;
    }];
}

【讨论】:

  • 感谢您的详细回答。今天晚些时候或明天试一试,因为我现在时间不多了。
  • 我认为您的解决方案应该有效。但目前我使用的是部分依赖 IB 的,因为它需要对我现有的代码进行较少的更改。
【解决方案2】:

对于那些有类似问题的人,可以在另一个 SO 问题中找到您的答案:Laying out & sizing of subviews in a UIViewController

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多