- (BOOL) shouldAutorotateToInterfaceOrientation
: (UIInterfaceOrientation)interfaceOrientation;
上述方法在允许旋转发生方面按预期工作。但是我很难在保持宽高比的同时尝试UIView拉伸。
UIView在转换为横向模式时水平拉伸会发生什么,但无论我做什么,它都不会垂直伸展。事实上,它的高度在横向模式下会相当缩小。
在IB和代码中尝试了以下设置但没有用。
希望有人能帮忙......
如果你做过/遇到过类似的事情,请留言。
编辑:
我想我找到了另一个SO问题的解决方案。发生的事情是我的代码与IB的AutoResizing功能的影响纠缠在一起。可以在我自己的答案中找到问题的链接。
答案 0 :(得分:3)
首先,内容模式(使用setContentMode:
设置或通过更改IB中的视图模式)对您没有用,因为它控制的是视图的内容为了响应大小的变化 - 它不能控制实际的大小变化。更重要的是,除非你把它设置为UIViewContentModeRedraw
,否则内容不会被重新绘制,而是被移动或拉伸,这通常不是你想要的。
另一方面,设置自动调整遮罩(或使用IB中的自动调整大小)也无法获得所需的效果。 UIViewAutoresizingFlexibleWidth
会改变视图的宽度,与其超视图大小的变化成比例(使用UIViewAutoresizingFlexibleLeftMargin
和/或UIViewAutoresizingFlexibleLeftMargin
此外还将控制是否与距离的侧边距离屏幕保持不变)。但是自动调整遮罩不能让你根据宽度的变化来改变高度:你可以让它与superview的高度成比例变化和/或坚持到顶部/底部
因此,您必须在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;
}];
}
答案 1 :(得分:0)
对于那些有类似问题的人,可以在另一个SO问题中找到答案:Laying out & sizing of subviews in a UIViewController。