【问题标题】:CGRect's setFrame lost origin value on iOS 8.0CGRect 的 setFrame 在 iOS 8.0 上丢失了原始值
【发布时间】:2014-11-14 14:26:42
【问题描述】:

以下代码在 iOS 7.1 上完美运行

UIView *superView = self.superview;
[self removeFromSuperview];
CGFloat rightMarginWidth = self.rightMarginWidth ? self.rightMarginWidth : defaultRightMarginWidth;
CGRect newFrame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width + rightMarginWidth, self.frame.size.height);
//assign a new frame
self.frame = newFrame;
[superView addSubview:self];

但是,在 iOS 8.0 上,假设 newFrame 是 origin=(x=30, y=29) size=(width=127, height=34)。赋值后self.frame变成了origin=(x=0, y=0) size=(width=127, height=34)。

为什么这里丢失了“原点”值?

【问题讨论】:

  • 为什么要从superview中删除视图,只是为了重新添加它?只需改变它的框架。
  • @LeoNatan 只是换帧,不这样做会导致自动布局约束冲突。
  • 如果有自动布局,你不应该改变框架。
  • @LeoNatan 自动布局是由故事板设置的
  • @DavidLiu 有什么解决办法吗?我也有这个问题

标签: uiview ios8 frame


【解决方案1】:

如果视图控制器有自动布局约束,你应该添加self.translatesAutoresizingMaskIntoConstraints = YES;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2012-02-19
    • 1970-01-01
    • 2016-08-17
    • 2016-02-26
    相关资源
    最近更新 更多