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

Can I set frame of particular view programatically even if Auto Layout is enabled?

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

有解决办法吗?

检测到 orientation 后,您可以使用连接的 controlIBOutlets 来设置 frame 例如:

[myView setFrame:CGRectMake(x,y,width,height)];

希望对您有所帮助。

编辑

首先在故事板或您的 IB 中创建一个约束,然后为该约束创建一个出口:

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

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

self.viewHeightConstraint.constant = 40;

选项 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];
}