即使启用了自动布局,我也可以以编程方式设置特定视图的帧吗?

时间:2015-04-27 07:33:53

标签: ios uiview uiviewcontroller ios8 autolayout

假设我有一个视图控制器A,其中有5个视图,如标签,按钮。我已将约束设置为4个视图。但是,对于第五种观点,情况有所不同。在肖像中,我需要不同的x,y位置和高度和宽度。在风景中,我需要不同的x,y位置和高度和宽度。因此,不可能为此定义约束,因为它是一个自定义。我只需要以编程方式设置框架,无论我希望我的视图放置在不同的方向。

有没有解决方案?

2 个答案:

答案 0 :(得分:1)

检测到orientation后,您可以使用已关联IBOutlets的{​​{1}}来设置control,例如:

frame

我希望这会对你有所帮助。

修改

首先在故事板或您的IB中创建约束,然后为ex:

创建该约束的出口
[myView setFrame:CGRectMake(x,y,width,height)];

然后以编程方式更改此约束:

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *viewHeightConstraint;

答案 1 :(得分:1)

选项1 将其添加到您的viewcontroller,并使用它来监控您的设备方向,而不是更改您的第5个视图框

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{

}

选项2

在viewDidLoad中添加

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(change:) name:UIDeviceOrientationDidChangeNotification object:nil];

然后在此功能中,您可以监控方向更改

-(void)change:(UIDeviceOrientation)orientation{

}

在dealloc中,将其删除

-(void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
}