iOS AutoLayout의 디버깅 기술 (Xcode 7에서 도입 된 ID 등)
4036 단어 iOSXCode7AutoLayoutXcode디버깅
UIViewAlertForUnsatisfiableConstraints의 심볼릭 브레이크 포인트 설정
이 브레이크 포인트를 설정하면 말 그대로 AutoLayout의 제약 불일치가 발생했을 때 브레이크 해줍니다.
게다가 Action
도 설정하는 것이 간이고, 이 경우는 다음의 설정을 하면 브레이크시에 보기 쉬운 로그가 자동 출력되게 됩니다.
관련 : Objective-C - Xcode에서 디버깅이 실행되는 동안 충돌이 발생했을 때 중단되는 중단 점 설정 - Qiita
Objective-C
: po [[UIWindow keyWindow] _autolayoutTrace]
Swift
: expr -l objc++ -O -- [[UIWindow keyWindow] _autolayoutTrace]
추악한 로그( ´・‿・`)
다만, 화면 천이 후의 순간에 천이 후의 화면에서 제약 모순이 발생했을 경우, 로그에 나오는 레이아웃 정보가 이전의 화면에서 미묘하게 도움이 되지 않았다고 하는 문제도 있었습니다(´・ω・`)
그리고, 전 기사에는 쓰고 있지 않습니다만, 브레이크 한 상태로, Xcode의
View UI Hierarchy
를 실행하면, 아마 좋은 느낌에 그 화면 상태를 표시해 줄 것입니다.최근, Xcode의 상태가 나빠서, 이런 조작하면 크래쉬 해 버려, 나는 제대로 볼 수 있는지 확인 할 수 없었습니다만(´・ω・`)
제약에 이름 지정(Xcode 7~)
WWDC의 발표에 포함되어 있었던 것 같습니다만 Xcode 7에서는 이런 식으로, 제약은 Identifier
라는 프로퍼티가 있어, 그것을 설정하는 것으로 로그에 제약명이 나오게 되는 것 같습니다.
코드의 경우는 이렇네요.
constraint.identifier = "$GemeInfoBottom$"
확실히 로그에 이름이 나왔습니다. 알기 쉽다( ´・‿・`)
2015-08-31 09:59:13.223 Player[80154:6146881] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f8a42dd76c0 V:[UIImageView:0x7f8a4517b0c0(44)]>",
"<NSLayoutConstraint:0x7f8a42d1e110 UITableViewCellContentView:0x7f8a42decfd0.centerY == UIImageView:0x7f8a4517b0c0.centerY>",
"<NSLayoutConstraint:0x7f8a4514a2b0 '$GemeInfoBottom$' V:[UIImageView:0x7f8a4517b0c0]-(>=8)-| (Names: '|':UITableViewCellContentView:0x7f8a42decfd0 )>",
"<NSLayoutConstraint:0x7f8a453047f0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8a42decfd0(59.5)]>"
)
전 제약에 미리 붙여 두면 뒤틀릴 것 같지만, 꽤 번거롭지 않네요(´・ω・`)
Reference
이 문제에 관하여(iOS AutoLayout의 디버깅 기술 (Xcode 7에서 도입 된 ID 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mono0926/items/b3a7065988b9460d6062
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
constraint.identifier = "$GemeInfoBottom$"
2015-08-31 09:59:13.223 Player[80154:6146881] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f8a42dd76c0 V:[UIImageView:0x7f8a4517b0c0(44)]>",
"<NSLayoutConstraint:0x7f8a42d1e110 UITableViewCellContentView:0x7f8a42decfd0.centerY == UIImageView:0x7f8a4517b0c0.centerY>",
"<NSLayoutConstraint:0x7f8a4514a2b0 '$GemeInfoBottom$' V:[UIImageView:0x7f8a4517b0c0]-(>=8)-| (Names: '|':UITableViewCellContentView:0x7f8a42decfd0 )>",
"<NSLayoutConstraint:0x7f8a453047f0 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f8a42decfd0(59.5)]>"
)
Reference
이 문제에 관하여(iOS AutoLayout의 디버깅 기술 (Xcode 7에서 도입 된 ID 등)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mono0926/items/b3a7065988b9460d6062텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)