【问题标题】:Why view disappear after rotation of M_PI*0.25 (but not by M_PI*0.26)为什么旋转 M_PI*0.25 后视图消失(而不是 M_PI*0.26)
【发布时间】:2014-03-18 09:49:01
【问题描述】:

我试图回答这个关于 view.frame 和 view.bounds 之间区别的问题:

我写过这个:

- (void)viewDidLoad
{
    [super viewDidLoad];


    // Do any additional setup after loading the view, typically from a nib.

    [self showPropertiesOfLabel];

    self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.25);

    [self showPropertiesOfLabel];
}

- (void) showPropertiesOfLabel {
    NSLog(@"bounds.origin.x: %f", self.label.bounds.origin.x);
    NSLog(@"bounds.origin.y: %f", self.label.bounds.origin.x);
    NSLog(@"bounds.size.width : %f", self.label.bounds.size.width);
    NSLog(@"bounds.size.height: %f", self.label.bounds.size.height);


    NSLog(@"frame.origin.x : %f", self.label.frame.origin.x);
    NSLog(@"frame.origin.y : %f", self.label.frame.origin.y);

    NSLog(@"frame.size.width : %f", self.label.frame.size.width);
    NSLog(@"frame.size.width : %f", self.label.frame.size.height);
}

但让我印象深刻的是,我的观点被我称为“标签”之后

self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.25);

消失了!但仍然报告它的框架和边界值(相当恰当)。

最有趣的部分是,如果我改变了旋转角度:

self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.26);

它可以正常工作。视图不再消失!

我已经在设备上和模拟器中测试过:

这是它的视频,在模拟器中测试:

http://youtu.be/O6aYRt_4xsE

PS:

它在我看来就像一个错误。

编辑:

看起来这种行为(错误?)是由自动布局机制引起的。

您可以通过单击故事板文件将其关闭,在 Xcode 的右侧应该有选项卡 “显示文件检查器”并取消选中此框:

这是证明这实际上是 Autolayout 问题的视频:

http://youtu.be/HbFRlXtiZ-g

但这仍然不能回答问题。

【问题讨论】:

    标签: ios debugging ios7 uiview rotation


    【解决方案1】:

    据我所知,使用“经典”方法更改受自动布局约束的视图层次结构的内容的结果或多或少是未定义的。

    所以这实际上不是一个错误。如果您想以编程方式更改布局,您需要做的是将您的更改转换为自动布局约束的更改。这可以通过将translatesAutoresizingMaskIntoConstraints 设置为YES 来自动完成。

    也请查看this SO Question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多