如何在iOS 7中以编程方式设置UILabel的位置

3

我迁移到了Xcode 5并开始为iOS 7编程。我试图手动设置标签的位置(通过编程方式)以产生不同的iPhone 4和iPhone 5设备布局。我想这应该很容易,如下所示:

viewDidLoad中:

myLabel.autoresizingMask = UIViewAutoresizingNone;
myLabel.frame = CGRectMake(10, 10, 280, 21);

至少StackOverflow上的所有文章都这样建议,但是对我来说并没有用。无论我在CGRectMake中输入什么值,标签位置都不会改变。我甚至尝试了在viewWillLayoutSubviews中使用相同的代码,但也没有起作用。如果我NSLog新坐标,它会向我显示已经接受了它们,但在模拟器上,标签位置没有变化。有什么建议吗?

你是否强制刷新了屏幕,[yourView setNeedsDisplay] - MZimmerman6
你是将这个作为某个视图的子视图添加的还是self.view?它被添加为子视图了,请检查与父视图的相对关系。 - Maheswaran Ravisankar
尝试在ViewWillAppear中添加您的标签代码。 - Sam B
setNeedsDisplay 没有起作用,我已经尝试过了。 - antf
viewWillAppear 也没有起作用。到目前为止,唯一有效的方法是关闭自动布局(如下所建议),但我担心这样做后,我必须手动设置所有内容,而我不想那样。我只想手动设置某些项目。 - antf
2个回答

5

我认为你需要在Interface Builder中关闭主视图的“使用自动布局”标志。

创建新项目时,默认情况下启用自动布局。

enter image description here


这不会影响我项目中的所有视图吗?我希望Autolayout仅适用于某些视图(或项目),而不是所有视图。 - antf
停止它是可以的,但这是否意味着我现在需要手动设置所有内容的位置? - antf
您可以在使用自动布局和不使用它的情况下获得两种视图,但是您必须决定是否在特定视图上使用它。有一份关于此问题的苹果文档:https://developer.apple.com/library/ios/documentation/userexperience/conceptual/AutolayoutPG/AdoptingAutoLayout/AdoptingAutoLayout.html#//apple_ref/doc/uid/TP40010853-CH15-SW1 - nzs
或者您可以尝试将UILabel封装在一个视图中(例如,该视图的大小为整个视图),并在此视图中禁用AutoLayout。我没有尝试过,但参考的Apple文档提到了一些关键词,在Interface Builder中,您可以在每个视图上指定此标志... - nzs

0
在您的viewDidLoad中尝试调用:
[self.view frame];
这将强制重新绘制屏幕。 :)
我知道,它看起来像是工业代码,但有时候它会有帮助 :)

然后请确保您不要在其他方法中更改标签的框架。 检查所有VC的方法: viewDidLoad,viewWillAppear:,viewDidAppear等...... - arturdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接