我希望在调用ViewDidLoad时创建一个在屏幕外的UIView,但是一旦调用了某个函数,我将动画到屏幕上。动画UIView的代码很好,但是我似乎无法从UVEiew屏幕开始绘制(我已经将故事板中的UIView组装到我的UIViewControleller上)。这是我尝试过的代码:
- (void)viewDidLoad {
...
[_tagView setFrame:CGRectMake(0, self.view.frame.size.height+40, self.view.frame.size.width, 40)];
...
}
_tagView被绘制在我将它放在StoryBoard编辑器中的位置,该编辑器位于我的UIViewController的底部。
答案 0 :(得分:1)
一些事情:视图对象的框架在其父视图的坐标空间中给出了它的坐标。
视图的界限是它的内部坐标系。
当你设置一个视图的框架时,它应该用它的父框架表示,而不是它的父框架。
因此,您的代码应该根据self.view.bounds创建_tagView的框架,而不是self.view.frame。
接下来,您使用的是AutoLayout还是struts和spring?在Xcode 5中,一切都默认为AutoLayout。 AutoLayout处于活动状态时,您无法更改边框和边界。相反,你必须改变相关的约束。如果要手动设置视图框架,可能需要关闭AutoLayout并使用“struts and springs”样式视图几何体。
已编辑:为了清晰起见,我将评论中的部分信息移到了原始答案中:
如果要在运行时自动布局处于活动状态时移动视图,则必须找到要更改的设置的约束(宽度,高度,前缘,后缘等)和控制 - 拖动约束你的.h文件来建立一个出口。然后在代码中更改与约束关联的常量属性。 - Duncan C 22分钟前
请注意,您可以在逐个故事板或NIB-by-NIB的基础上关闭自动布局。如果选择文件并选择文件检查器,则“Interface Builder文档”部分中会隐藏一个“使用Autolayout”复选框。我一直很难找到它。
这是一个屏幕截图,显示Xcode项目窗口中的按钮位置(最右侧)