即使启用了自动布局,我能否以编程方式设置特定视图的框架?
Posted
技术标签:
【中文标题】即使启用了自动布局,我能否以编程方式设置特定视图的框架?【英文标题】:Can I set frame of particular view programatically even if Auto Layout is enabled? 【发布时间】:2015-04-27 07:33:52 【问题描述】:假设我有一个视图控制器 A,里面有 5 个视图,比如标签、按钮。我已将约束设置为 4 个视图。但是,对于第 5 种观点,情况不同。在纵向中,我需要不同的 x、y 位置以及高度和宽度。在横向中,我需要不同的 x、y 位置以及高度和宽度。因此,不可能为此定义约束,因为它是自定义的。我只需要以编程方式设置框架,只要我希望我的视图以不同的方向放置。
有什么解决办法吗?
【问题讨论】:
5th_view.translatesAutoresizingMaskIntoConstraints = YES;然后设置框架。 我会写你在改变方向的方法中提到的代码。对 ?并请写一个“答案”,这样我就可以投票并接受它是否有效...... 在方向更改中编写此代码。哈哈.....不需要投票......只需尝试这段代码,让我知道它是否有效。 它就像一个魅力。因此,将来,如果客户希望将特定视图放置在自定义位置,即使将约束添加到其他视图,我也可以使用它。对吧? 很高兴它成功了。 :-) 是的,您可以使用它。快乐编码:-) :-) 【参考方案1】:检测到orientation
后,您可以使用您连接的control
的IBOutlets
来设置frame
,例如:
[myView setFrame:CGRectMake(x,y,width,height)];
希望对你有帮助。
编辑
首先在故事板或您的 IB 中创建一个约束,然后为 ex 的该约束创建一个出口:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *viewHeightConstraint;
然后以编程方式更改此约束,例如:
self.viewHeightConstraint.constant = 40;
【讨论】:
我已经试过了。但是,由于启用了自动布局并且我为剩余的 4 个视图添加了约束,因此第 5 个视图上的帧更改(以编程方式)不起作用。 我的问题不在于如何获得设备分辨率或方向或更改框架的位置。 @Ahsan Autolayout 已启用,您需要将其转换为约束。 另一种可能是您在 xib 文件或故事板中设置约束,并以编程方式更改这些约束。查看我编辑的答案 我不想对第 5 个视图使用任何约束。我只想以编程方式根据需要更改框架...【参考方案2】:选项 1 将此添加到您的视图控制器,并使用它来监控您的设备方向,而不是更改您的第 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];
【讨论】:
您能给我简要介绍一下选项 1 吗?我的意思是我会用那种方法写什么?以上是关于即使启用了自动布局,我能否以编程方式设置特定视图的框架?的主要内容,如果未能解决你的问题,请参考以下文章