Xcode 6 中大小类的问题

Posted

技术标签:

【中文标题】Xcode 6 中大小类的问题【英文标题】:Trouble with size classes in Xcode 6 【发布时间】:2014-12-09 21:40:23 【问题描述】:

我遇到了一个关于尺寸等级的非常奇怪的问题:

在大小类 any x any 中,我有一个 UITableViewController,其中包含一个约束宽度为 150 和约束高度为 150 的 UIView

在大小类Regular x Regular中,我“卸载”了这些约束,并添加了另一个约束宽度和高度,大小为250。

当我在 iPad 上启动我的应用程序时,我可以看到这个 UIView 的“正确”大小,但在我的代码中,在 ViewDidLoadViewWillAppear 中,这个视图的大小仍然是“150” . (我想为几件事获取视图的大小。)仅在函数ViewDidAppear 中,我的大小是正确的,但我不明白为什么。

有什么想法吗?

示例代码:

- (void)viewDidLoad 
    [super viewDidLoad];

    [self loadImg];
    [self loadText];

    self.navigationItem.hidesBackButton = YES;


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (void) loadText 
    //
 

- (void) loadImg     
    self.myView.layer.cornerRadius = self.myView.frame.size.width / 2;
    self.myView.clipsToBounds = YES;
    UIView *svg = [Utils defineImg:self.myView :@"myImage" :50];
    [self.myView addSubview: svg];
    svg.center = CGPointMake(self.myView.frame.size.width / 2, self.myView.frame.size.height / 2);

【问题讨论】:

我遇到了同样的问题,在 setNeedsDisplay 方法中使用自定义 UIImageView,我正在更改cornerRadius,但为此我需要框架的宽度。而且我的尺寸不对。我在 Interface Builder 中使用 Size Classes,顺便说一句 你可以看到我关于它的最后一个主题,有一个“解决方案”(真的不是最好的,但它有效。) 【参考方案1】:

viewDidLoadviewWillAppear 不是查找特定框架尺寸的正确位置。自动布局完成后会设置框架。

您可以覆盖viewDidLayoutSubviews 并获取它。

【讨论】:

mhh 好的,但我不明白为什么我在 ViewDidLoad 中的 Any x Any size 类中有我的视图大小,而不是我在 Regular x Regular 中的视图大小......而在我的 ipad 屏幕上是正确的... 而且它不起作用...在 viewDidLayoutSubviews 中,我再次使用 150 x 150 而不是 300 x 300 .... 看来我只有在 viewDidAppear 中的尺寸正确,我没有'不明白会发生什么...... 您可以为您的视图控制器发布代码吗?你可能有一些错别字。它必须在 viewDidLayoutSubviews 中工作 我只是设置了一个日志: NSLog("size : %f - %f ", self.myView.frame.size.width, self.myView.bounds.size.width"); 我看到“150”而不是“250”:/ post 编辑 :) 所以我试着把“[self loadImg];”在 viewdidlayout 等中;使用以前的日志,没有任何效果...仅在 viewdidappear 中。【参考方案2】:

所以我认为您对尺寸等级有些困惑。这和我有同样的困惑。

当您选择以 RegularxRegular 形式查看尺寸类别时,您只是在查看它在该模式下的外观。您在此处所做的任何更改都不会覆盖 anyxany 模式。

而且您可能不应该限制视图的宽度和高度。尝试使用与其他视图相关的约束来让您的 UIView 看起来像在屏幕上一样。

【讨论】:

是的,我知道。但是我为大小类Regular x Regular添加了特定的约束......我不明白为什么我在iPad上看到这个视图的“正确”大小,但在我的代码中,我有AnyxANy大小类的大小: / RegularxRegular 不会覆盖 AnyxAny 是什么意思...不是重点吗?

以上是关于Xcode 6 中大小类的问题的主要内容,如果未能解决你的问题,请参考以下文章

带有空 UIScrollView 的可滚动内容大小歧义(XCode 6)

如何在 xcode6 中使用大小类

Xcode 6 Storyboard 为 UITextView 设置错误的帧大小

Xcode 6 大小类中的自定义字体大小无法与自定义字体一起正常工作

使用图像为 UIView 的位置和大小设置动画的正确方法(此方法在 Xcode 6 中中断)?

Xcode 6 Interface Builder 视图大小错误