2

设置为“Aspect Fit”的UIImage视图将自动动态缩放其图像以适应当前边界UIUmageView,同时保持图像的比例。设置为“ UIViewAspect Fit”似乎对其子视图没有同样的效果。

我尝试使用下面的代码通过代码设置父视图,并尝试了自动调整大小掩码的几种变体(我没有使用自动布局)。我是否遗漏了一些明显的东西,或者我是否需要编写一些代码来根据父视图的当前大小为我的子视图计算正确的比例?

[self.view setContentMode:UIViewContentModeScaleAspectFit];
4

4 回答 4

6

从文档中:

内容模式指定当视图的边界发生变化时如何调整视图层的缓存位图。

对于图像视图,这是在谈论图像。对于绘制其内容的视图,这是在谈论绘制的内容。它不影响子视图的布局。

您需要查看 subviews 上的自动调整大小掩码。内容模式在这里是一个红鲱鱼。如果您无法使用自动调整大小的蒙版实现所需的布局,则需要layoutSubviews手动实现和计算子视图位置和框架。

于 2013-01-01T15:01:17.223 回答
2
  • 内容模式不影响视图的子视图。
  • 您将使用自动调整大小的掩码来确定子视图的布局方式。
  • 如果这还不够,您可能需要实施 layoutSubviews

引用自:https ://stackoverflow.com/a/14111480/1374512

其他有用信息layoutSubviewshttps ://stackoverflow.com/a/5330162/1374512

于 2013-03-28T06:33:36.613 回答
1

这个怎么样 :

 self.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

或者你可以试试这个:

// horizontal 
   childView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin |  UIViewAutoresizingFlexibleRightMargin;

// vertical 
   childView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

// both 
   childView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

如果您需要任何进一步的参考,我认为这是两个漂亮的问题:

1)以编程方式自动调整蒙版大小

2) UIView 和 AutoresizingMask 被忽略

于 2013-01-01T13:44:14.753 回答
0

我一直在玩它。这是不完整的,只是处理纵向子视图缩放,但到目前为止工作正常。

if (self.view.bounds.size.width < self.view.bounds.size.height) {
    NSLog(@"view is portrait");
    if (_sview.frame.size.width < _sview.frame.size.height) {
        NSLog(@"subview is portrait");
        [UIView animateWithDuration:0.1
                         animations:^{
                             _sview.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
                         }];
    } else {
        NSLog(@"subview is landscape");
    }
} else {
    NSLog(@"landscape");
    if (_sview.frame.size.width < _sview.frame.size.height) {
        [UIView animateWithDuration:0.1
                         animations:^{
                             _sview.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.65, 0.65);
                         }];
    } else {
        NSLog(@"subview is landscape");
    }

}
于 2013-01-01T16:40:31.317 回答