容器视图中的 UIScrollView 的帧大小不正确

Posted

技术标签:

【中文标题】容器视图中的 UIScrollView 的帧大小不正确【英文标题】:UIScrollView in container view has incorrect frame size 【发布时间】:2013-05-25 18:40:39 【问题描述】:

我有一个带有 Frame = X=20,Y=88,Width=728,Height=660 的 UIContainerView 和一个嵌入其中的 UIScrollView。

UIScrollView 报告 Frame = X=0,Y=0,Width=768,Height=960 导致分页 UIScrollView 时宽度偏移 40(金色部分)。它导致以下输出向左分页一次:

但是,ContentSizeForViewInPopover 会报告预期的帧大小 = Width=728, Height=660。如何更正 UIScrollView 框架以具有正确的大小?

这是嵌入式 UIViewController 的 ViewDidLoad() 的代码:

var pages = PageControl.Pages = 2;
Console.WriteLine("ScrollView Frame: 0", ScrollView.Frame);

for(int i = 0; i < pages; i++)

    RectangleF frame
    frame.X = ScrollView.Frame.Width * i; // expected 728 * i but is 768 * i
    frame.Y = 0;
    frame.Size = ScrollView.Frame.Size;

    Console.WriteLine("Subview frame: 0", frame);

    ScrollView.AddSubview(
        new UIView(frame)  
            Bounds = frame,
            BackgroundColor = GetRandomColor() 
        );
    

    ScrollView.ContentSize = new SizeF(ScrollView.Frame.Width * pages, ScrollView.Frame.Height);
    Console.WriteLine("ScrollView ContentSize = 0", ScrollView.ContentSize);

【问题讨论】:

UIScrollView 在代码中的什么位置创建?您必须将其 Frame(不是 ContentSize!)设置为超级视图的边界并为其提供适当的自动调整大小设置。 UIScrollView 设置在 UIView 上,该 UIView 位于 StoryBoard 上的 UIContainerView 内。 UIScrollView 没有显式创建。 【参考方案1】:

调用 [self.ScrollView layoutIfNeeded];在这行之前

frame.X = ScrollView.Frame.Width * i; // expected 728 * i but is 768 * i

它对我有用,祝你好运

【讨论】:

【参考方案2】:

仔细检查 IB 在父 UIViewController 下的 Attributes Inspector 的 Layout 部分下,是否未选中“Adjust Scroll View Insets”。我遇到了一个类似的问题,让我很困惑,这就是我需要做的所有事情来获得正确的布局。

【讨论】:

【参考方案3】:

ios 7.0 中 使用 self.automaticallyAdjustsScrollViewInsets=NO;在 ViewDidLoad 中

【讨论】:

【参考方案4】:

尝试在代码中创建您的 UIScrollView,显然设计器会覆盖您在代码中应用的任何调整。

【讨论】:

以上是关于容器视图中的 UIScrollView 的帧大小不正确的主要内容,如果未能解决你的问题,请参考以下文章

将多个容器视图放在 ios 中的分页 UIScrollView 中

有没有办法为 UIScrollView 中的不同图层设置不同的帧大小?

viewDidLayoutSubviews 中 UIScrollview 的帧不正确

调整容器 uiscrollview 中所有 uiscrollview 的大小

自动布局:ViewDidAppear 中的帧大小不正确

UIScrollView 奇数滚动