以编程方式创建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,在旋转设备时保留其大小的主要内容,如果未能解决你的问题,请参考以下文章

当设备旋转时,如何为视图设置正确的边界?

如何检测以编程方式生成的 UIView 的旋转

旋转UIView并使其更改视图大小以适应相对于旋转的空间

如何检测以编程方式生成的UIView的旋转

以编程方式设置自动布局约束

旋转的 UIView 变得无响应