以编程方式创建UIView,在旋转设备时保留其大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式创建UIView,在旋转设备时保留其大小相关的知识,希望对你有一定的参考价值。
我正在以编程方式创建一个UIView,它最终将成为我的通用应用程序的帮助语音泡沫,但我很难让UIView支持设备轮换。当我的视图被创建时,它看起来很棒,就像我想要的那样但是当我旋转设备时,我的UIView popover会扩展以填满整个屏幕,这不是我想要的。
如果有帮助的话,我正在使用带有自动布局的ios 6用于其他故事板控件。
有人可以解释为什么iOS在设备轮换时将我的popover调整为全屏?
我还考虑过为它添加一些约束,但认为对于子层而不是弹出视图本身更多。
我使用的代码是:
customView = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)];
customView.layer.cornerRadius = 15;
customView.layer.borderWidth = 1.5f;
customView.backgroundColor = [UIColor blackColor];
[customView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
[self.tableView.superview addSubview:customView];
答案
[customView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];
当父视图更改时,Flexiblewidth / height自动调整遮罩会调整UIView的大小。旋转视图时,您的超级视图的框架会发生变化,视图将按比例更改宽度和高度。如果您想要相同的大小,请删除该行,如果您想在视图周围使用相同的填充
[customView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin];
另一答案
从iOS6开始,苹果鼓励使用autolayout,因为代码更具描述性,更易于管理/调试。
例如。在autolayout中做同样的事情
UIView *customView = [[UIView alloc] init];
customView.backgroundColor = [UIColor blackColor];
customView.layer.cornerRadius = 15;
customView.layer.borderWidth = 1.5f;
[customView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.tableView.superview addSubview:customView];
NSArray *arr;
//horizontal constraints
arr = [NSLayoutConstraint constraintsWithVisualFormat:@"|-20-[customView(200)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(customView)];
[self.tableView.superview addConstraints:arr];
//vertical constraints
arr = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[customView(200)]"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(customView)];
[self.tableView.superview addConstraints:arr];
以上是关于以编程方式创建UIView,在旋转设备时保留其大小的主要内容,如果未能解决你的问题,请参考以下文章