以编程方式创建UIView,在旋转设备时保留其大小

时间:2013-02-11 22:34:30

标签: ios ipad cocoa-touch popup popover

我正在以编程方式创建一个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];

2 个答案:

答案 0 :(得分:2)

[customView setAutoresizingMask:UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight];

灵活宽度/高度自动调整遮罩会在父视图更改时调整UIView的大小。旋转视图时,您的超级视图的框架会发生变化,视图将按比例更改宽度和高度。如果您想要相同的尺寸,请删除该行,如果您想在视图周围使用相同的填充

 [customView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin];

答案 1 :(得分:1)

从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];