[英]Why view disappear after rotation of M_PI*0.25 (but not by M_PI*0.26)
我試圖回答這個有關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);
dissapeared! 但是仍然報告它的框架和邊界值(相當恰當)。
最有趣的部分是,如果我更改了旋轉角度:
self.label.transform = CGAffineTransformMakeRotation(M_PI * 0.26);
它可以正常工作。 視圖不再消失了!
我已經在設備上像在模擬器中一樣對它們進行了測試:
這是在模擬器中測試的視頻:
PS:
在我看來,它像個蟲子。
編輯:
看來此行為(錯誤?)是由自動布局機制引起的。
您可以通過單擊情節提要文件將其關閉,然后在Xcode的右側應顯示“顯示文件檢查器”選項卡,然后取消選中此框:
這是視頻證明,這實際上是自動排版的問題:
但這仍然無法回答問題。
據我所知,使用“經典”方法更改受自動布局約束的視圖層次結構內容的結果或多或少是不確定的。
因此,這實際上不是錯誤。 如果要通過編程方式更改布局,您需要做的就是將更改轉換為自動布局約束的更改。 通過將translatesAutoresizingMaskIntoConstraints
設置為YES,可以自動完成此操作。
請同時查看此SO問題 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.