0

我正在尝试以编程方式更改 UIView 的布局,而不是使用自动布局,因为我正在尝试为 iOS 4 及更高版本部署此应用程序。我基本上将屏幕高度设置为 455(iPhone 5)(我知道实际屏幕尺寸是 568 点,但我在底部有一个标签栏,所以我假设 IB 中显示的尺寸已经考虑到了这一点)。我记录了所有按钮和标签相对于较长屏幕尺寸的来源,并以编程方式将它们更改为我喜欢的方式。问题是,一些按钮和标签现在从屏幕上消失了,所以我认为我必须执行某种转换以将它们保持在界限内,但我不确定是什么。请参阅下面的图片:

调用我的 initMethod 之前的图像以更改按钮和标签原点 调用我的 initMethod 以更改 XCode 中旧屏幕尺寸 的原点 视图属性之后的图像 这就是我希望视图的外观。我移动了按钮并记录了每个按钮的起源。 我在 viewWillAppear 中的 init 方法的图片。注意标签的框架是如何为零的。 这是我使用的代码:在此处输入图像描述在此处输入图像描述

-(void)initView
{
    CGRect screenBounds = [[UIScreen mainScreen] bounds];
    if (screenBounds.size.height == 480) {
        //iphone 4,4s
        //done
    }else if(screenBounds.size.height == 568) {
        //iphone 5
        CGRect frame;
        //Static Professor label
        frame = [staticProfessorLabel frame];
        frame.origin.x = 48;
        frame.origin.y = 218;
        [staticProfessorLabel setFrame:frame];
        //Professor Label
        frame = [professorLabel frame];
        frame.origin.x = 192;
        frame.origin.y = 218;
        [professorLabel setFrame:frame];
        //show button
        frame = [showProfessorButton frame];
        frame.origin.x = 67;
        frame.origin.y = 258;
        [showProfessorButton setFrame:frame];
        //clear proff button
        frame = [clearProfessor frame];
        frame.origin.x = 240;
        frame.origin.y = 258;
        //note label
        frame = [bottomNote frame];
        frame.origin.x = 160;
        frame.origin.y = 310;
        [bottomNote setFrame:frame];
        //search button
        frame = [searchButton frame];
        frame.origin.x = 158;
        frame.origin.y = 424;
        [searchButton setFrame:frame];
        //spinner
        frame = [actIndicator frame];
        frame.origin.x = 266;
        frame.origin.y = 424;
        [actIndicator setFrame:frame];
    }
}

另外,我在 viewDidAppear 方法中调用它是因为当我在 viewDidLoad 中调用它时,没有一个按钮和标签给我一个有效的框架(我猜它们还没有初始化)。

4

2 回答 2

2

您的 Xcode 屏幕截图显示您的故事板包含约束,因此我们可以判断您的故事板已打开自动布局。如果要直接在代码中设置视图框架,则必须关闭自动布局。

如果您需要帮助关闭情节提要上的自动布局,请在此处查看我的答案。

于 2012-11-06T07:12:40.857 回答
1

您的硬编码坐标完全错误。只需仔细检查您的价值观。

例如,bottomNotex160 开始,这显然太靠右了。

于 2012-11-06T06:00:15.260 回答