如何以编程方式仅为一个特定的ViewController添加IB约束?

时间:2013-01-04 12:48:09

标签: iphone constraints xcode4.5 uistoryboard

我正在创建一个iPhone应用程序。该应用程序已开发适合4英寸屏幕。现在我必须添加对3.5英寸屏幕的支持。我有一些自动调整的视图,例如UITableViews。但是,我还有一个包含Interface Builder中许多对象的视图。

使用这段代码,我检查屏幕是3.5还是4英寸:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
        NSLog(@"iPhone with 3.5 Inch screen");
    }
    if(result.height == 568)
    {
        // iPhone 5
        NSLog(@"iPhone with 4 Inch screen");
    }
}

我可以在此代码检查中从故事板中为此特定ViewController 添加IB约束吗?以编程方式创建这些约束的最简单方法是什么?


编辑: 我想要实现的目标:

  • 获取我的房产
  • 在Storyboard
  • 中停用此特定ViewController的autoLayout
  • 在上面的检查中手动添加constratins。

以下是我在ViewControllers .h文件中定义的属性列表:

@property (nonatomic, assign) NSInteger selectedIndex;
@property (nonatomic, retain) AbstractActionSheetPicker *actionSheetPicker;
@property (weak, nonatomic) IBOutlet UITextField *workerField;
@property (weak, nonatomic) IBOutlet UITextField *dateField;
@property (nonatomic, retain) NSMutableArray *workers;
@property (nonatomic, retain) NSDate *selectedDate;
@property (nonatomic, retain) IBOutlet UISwitch *cutSwitcher;
@property (nonatomic, retain) IBOutlet UISwitch *colorSwitcher;
@property (nonatomic, retain) IBOutlet UISwitch *waveSwitcher;
@property (nonatomic) BOOL internetActive;
@property (nonatomic) BOOL hostActive;

1 个答案:

答案 0 :(得分:0)

为Xib文件中的所有对象设置CGRect。为iPhone 4设置一个版本,为iPhone 5设置另一个版本。

        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGRect master;
        if(result.height == 480)
        {
            // iPhone Classic
            NSLog(@"iPhone with 3.5 Inch screen");
            CGRect classic = CGRectMake(0,0,0,0);
            master = classic;
        }
        if(result.height == 568)
        {
            // iPhone 5
            NSLog(@"iPhone with 4 Inch screen");
            CGRect iPhone5 = CGRectMake(0,0,0,0);
            master = iPhone5;
        }

someView.frame = master;

编辑:

首先,我认为您不能禁用特定viewController的自动布局。其次,如果你用我的方法逻辑替换上面的答案中的rect逻辑,它应该仍然有效。制作两个方法,每个视图一个,并在if(result.height ==)中添加它们。是否要直接在viewController或单例类中执行此操作取决于您。