我正在尝试更新包含内部按钮和标签的UIView
的框架。我正在尝试在viewDidLayoutSubviews
中更新它(我也尝试过viewDidLoad
,viewWillAppear
,viewDidAppear
..)。我想改变视图的y位置(origin.y)。
NSLogs说我的原始y位置是334,并且在更改之后,它是100.但是,在我看来,位置不会改变。我已经检查过故事板中的视图已连接。我做错了什么?
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
CGRect theFrame = [self.bottomView frame];
NSLog(@"Y position bottomview: %f", self.bottomView.frame.origin.y);
if([[UIScreen mainScreen] bounds].size.height == 568) //iPhone 4inch
{
// NSLog(@"iphone5");
}
else{
// NSLog(@"iphone4");
theFrame .origin.y = 100;
}
self.bottomView.frame = theFrame;
NSLog(@"Y position bottomview after changing it: %f", self.bottomView.frame.origin.y);
[self.view layoutIfNeeded];
}
答案 0 :(得分:16)
我遇到了同样的问题。强制你的视图的超视图布局帮助我:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self.bottomView.superview setNeedsLayout];
[self.bottomView.superview layoutIfNeeded];
// Now modify bottomView's frame here
}
在斯威夫特:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
bottomView.superview!.setNeedsLayout()
bottomView.superview!.layoutIfNeeded()
// Now modify bottomView's frame here
}
答案 1 :(得分:5)
问题与Autolayout有关。但是由于我在项目中使用autolayout,所以无法将其关闭。我解决了在视图中定义适当的约束。然后无需检查它是iPhone 4英寸还是3.5英寸并更改框架的位置,因为它会自动适应每种尺寸。
答案 2 :(得分:2)
从xib文件或情节提要中设置AutoLayout NO。
答案 3 :(得分:0)
信不信由你,以下代码已将其修复
override func viewDidLayoutSubviews() {
DispatchQueue.main.async {
// UI changes
}
}
答案 4 :(得分:0)
框架设置应在您的代码中起作用。但是,如果视图具有自动布局约束(我假设您已经拥有),则框架设置将无法使用。您只能选择一种方式或另一种方式(手动框架设置或自动布局),不能同时使用两种方式。