nab*_*gir 11 runtime objective-c frame uiview ios
我正在尝试更新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];
}
Run Code Online (Sandbox Code Playgroud)
Lar*_*erg 17
我遇到了同样的问题.强制你的视图的超视图布局帮助我:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
[self.bottomView.superview setNeedsLayout];
[self.bottomView.superview layoutIfNeeded];
// Now modify bottomView's frame here
}
Run Code Online (Sandbox Code Playgroud)
在Swift中:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
bottomView.superview!.setNeedsLayout()
bottomView.superview!.layoutIfNeeded()
// Now modify bottomView's frame here
}
Run Code Online (Sandbox Code Playgroud)
信不信由你下面的代码修复了它
override func viewDidLayoutSubviews() {
DispatchQueue.main.async {
// UI changes
}
}
Run Code Online (Sandbox Code Playgroud)
这个问题与Autolayout有关.但是由于我在项目中使用autolayout,所以无法将其关闭.我解决了在视图中定义适当的约束.然后无需检查它是iPhone 4英寸还是3.5英寸并更改框架的位置,因为它会自动适应每种尺寸.
| 归档时间: |
|
| 查看次数: |
23517 次 |
| 最近记录: |