【发布时间】:2013-12-25 23:16:26
【问题描述】:
我有一个滚动视图,里面有一个内容视图。
滚动视图对顶部、底部、前导和尾部内容视图以及顶部、前导、试用超级视图具有约束,底部空间到底部布局。
我在旋转时更改了内容视图的宽度:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
_contentWidth.constant = 480;
}else{
//iPhone Portrait
_contentWidth.constant = 320;
}
}
当我运行应用程序并旋转到横向时,内容视图的宽度发生了变化,一切看起来都很好,但是滚动视图只允许在屏幕的左半部分滚动(整个视图滚动但你的手指必须在屏幕左侧滚动)。滚动视图帧 = (0 0; 320 431);。
如果我转到标签栏上的另一个标签并返回到此视图,则框架 = (0 0; 480 320);它应该是什么,一切正常/看起来都很好。
有什么想法我需要做些什么来通过不选择另一个选项卡并返回来实现这一点?
编辑
我创建了一个名为 ContentViewSubclass 的 Content View 子类,并在其中放入了以下方法:
-(CGSize)intrinsicContentSize{
CGSize size;
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{
size.height = 1000;
size.width = 480;
return size;
}else{
//iPhone Portrait
size.height = 1000;
size.width = 320;
return size;
}
}
然后在我的 ViewController.m 上我更新为以下代码:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[_contentView invalidateIntrinsicContentSize];
[_contentView intrinsicContentSize];
if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation))
{ _contentWidth.constant = 480;
_contentHeight.constant = 1000;
}else{
//iPhone Portrait
_contentWidth.constant = 320;
_contentHeight.constant = 1000;
}
}
当我记录我得到的尺寸时
风景: ContentViewSubclass 框架为 (0 0, 480 1000) UIScrollView 框架为 (0 20, 480 251) contentView 固有大小为 {480, 1000}
纵向: ContentViewSubclass 框架为 (0 0; 320 1000) UIScrollView 框架为 (0 20, 320 411) contentView 固有大小为 {320, 1000}
一切都在标签栏视图控制器中,它的设置如下:
- 查看
- 滚动视图
- 内容视图
- 标签(很多)
- 文本字段(很多)
- 表格视图 (2)
- CollectionViewSubcless (1)
- 滚动视图
我删除了表格视图和集合视图,以防它们引起问题,但没有帮助。
同样的问题。我在所有内容上都得到了正确的布局,并且所有内容都滚动了,但是您一直在横向触摸屏幕的左半部分来滚动它。如果我转到另一个选项卡视图并返回到这个视图,它可以正常工作。然后滚动视图显示 UIScrollView 框架为 (0 20, 480 300)。
【问题讨论】:
-
在旋转方法中,除了使内容视图的固有内容大小无效外,什么都不做。此外,请确保您将内容视图固定到滚动视图的内部,就像 Apple 在该技术说明中所做的那样(他们使用视觉格式化语言)。
标签: iphone ios7 scrollview xcode5 autolayout