【问题标题】:UIView subclass won't autoresizeUIView 子类不会自动调整大小
【发布时间】:2010-01-23 18:25:09
【问题描述】:

我一直在寻找有关调整大小的背景信息,但找不到太多信息。我知道我需要在超级视图上设置autoresizesSubviews,在子视图上设置autoresizingMask

我已经这样做了,我的 UIImageViews 正确调整大小,但我的自定义 UIView 子类没有。

UIImageView 的代码:

UIImageView *newX = [[[UIImageView alloc] initWithImage:dot] autorelease];
[newX setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[newX setFrame:CGRectMake(0, 0, self.view.bounds.size.width, 1)];
[self.view addSubview:newX];

自定义 UIView 子类的代码:

trace = [[TraceView alloc] initWithFrame:self.view.bounds];
[trace setAutoresizingMask:(UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin)];
[self.view addSubview:trace];

据我所知,视图按预期旋转,但没有调整大小。我再也看不到它的底部,它也没有填满右侧的屏幕。 是否必须向 UIView 子类添加任何内容才能正常调整大小?

编辑: 我已将 autoresizingMake 更改为 (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) 并调用 [subview setNeedsDisplay]; 我不确定为什么这是必要的,因为没有它 UIImageViews 可以正常工作,但它现在的行为符合预期。

【问题讨论】:

    标签: iphone uiview


    【解决方案1】:

    我认为您在子视图上缺少 UIViewAutoresizingFlexibleHeight 或宽度。否则我认为视图只是根据边距移动但不会调整大小。

    【讨论】:

    • Apple 的文档说 UIViewAutoresizingFlexibleBottomMargin 会导致“视图通过在左边距的方向上扩大或缩小来调整大小。”这就是我想要的。我不希望视野伸展。此外,即使我确实使用了 FlexibleWidth/Height,它也不会达到预期的效果。虽然它确实调整了大小,但只要我在子视图上调用setNeedsDisplayInRect:,它就会撤消调整大小,从那时起,调整大小就不正确了。它重复调整大小/取消调整大小,但使用的这个新形状不会像它应该填充的那样填充超级视图。
    • 那么苹果文档就说谎了。如果没有 FlexibleHeight/Width 选项,您不会得到任何拉伸。顺便说一句,在一个名为“Beginning iPhone Development Projects”的档案中有一些示例代码,您可以从iphonedevbook.com/forum/viewforum.php?f=54 获得这些代码,您可以构建和处理这些代码,以便更好地了解所有这些自动调整大小的工作原理。这些项目被称为“05 Autoresize 1”和“05 Autoresize 2”。我发现调整大小模型有点令人困惑,如果不使用选项就无法真正理解它。
    • 感谢您的指点,我已经搞砸了一点,我开始掌握它的窍门,但是 IB 和这样做的编程方式似乎并没有映射到彼此非常好。猜猜是时候问另一个问题了。
    【解决方案2】:

    你提到了轮换。包含您的自定义视图的超级视图实际上是否正确调整大小?如果有疑问,请将其背景设置为某种奇怪的颜色。如果在方向更改后它没有正确调整大小,那么您应该会在右侧看到一个白色或灰色条。

    【讨论】:

    • 是的,它可以很好地旋转和调整大小。
    猜你喜欢
    • 2013-01-22
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-07-14
    • 2011-01-08
    相关资源
    最近更新 更多