Đây là sự viết lại của điều này câu trả lời :
Trước tiên, bạn phải lấy con trỏ / tham chiếu đến đối tượng mà bạn định in tất cả các lần xem con của nó. Đôi khi bạn có thể tìm thấy đối tượng đó dễ dàng hơn bằng cách truy cập nó thông qua chế độ xem phụ của nó. Thích po someSubview.superview
. Điều này sẽ cung cấp cho bạn một cái gì đó như:
Optional<UIView>
▿ some : <FacebookApp.WhatsNewView: 0x7f91747c71f0; frame = (30 50; 354 636); clipsToBounds = YES; layer = <CALayer: 0x6100002370e0>>
- FaceBookApp là tên ứng dụng của bạn
- WhatsNewView là kiểu của bạn
superview
0x7f91747c71f0
là con trỏ tới superview.
Để in superView, bạn phải sử dụng các điểm ngắt.
Bây giờ để thực hiện bước này, bạn chỉ cần nhấp vào 'xem phân cấp gỡ lỗi'. Không cần điểm ngắt
Sau đó, bạn có thể dễ dàng làm:
po [0x7f91747c71f0 recursiveDescription]
mà đối với tôi trả lại một cái gì đó như:
<FacebookApp.WhatsNewView: 0x7f91747c71f0; frame = (30 50; 354 636); clipsToBounds = YES; layer = <CALayer: 0x6100002370e0>>
| <UIStackView: 0x7f91747c75f0; frame = (45 60; 264 93); layer = <CATransformLayer: 0x610000230ec0>>
| | <UIImageView: 0x7f916ef38c30; frame = (10.6667 0; 243 58); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x61000003b840>>
| | <UIStackView: 0x7f91747c8230; frame = (44.6667 58; 174.667 35); layer = <CATransformLayer: 0x6100006278c0>>
| | | <FacebookApp.CopyableUILabel: 0x7f91747a80b0; baseClass = UILabel; frame = (44 0; 86.6667 16); text = 'What's New'; gestureRecognizers = <NSArray: 0x610000c4a770>; layer = <_UILabelLayer: 0x610000085550>>
| | | <FacebookApp.CopyableUILabel: 0x7f916ef396a0; baseClass = UILabel; frame = (0 21; 174.667 14); text = 'Version 14.0.5c Oct 05, 2...'; gestureRecognizers = <NSArray: 0x610000c498a0>; layer = <_UILabelLayer: 0x610000087300>>
| <UITextView: 0x7f917015ce00; frame = (45 183; 264 403); text = ' • new Adding new feature...'; clipsToBounds = YES; gestureRecognizers = <NSArray: 0x6100000538f0>; layer = <CALayer: 0x61000042f000>; contentOffset: {0, 0}; contentSize: {264, 890}>
| | <<_UITextContainerView: 0x7f9170a13350; frame = (0 0; 264 890); layer = <_UITextTiledLayer: 0x6080002c0930>> minSize = {0, 0}, maxSize = {1.7976931348623157e+308, 1.7976931348623157e+308}, textContainer = <NSTextContainer: 0x610000117b20 size = (264.000000,340282346638528859811704183484516925440.000000); widthTracksTextView = YES; heightTracksTextView = NO>; exclusionPaths = 0x61000001bc30; lineBreakMode = 0>
| | | <_UITileLayer: 0x60800023f8a0> (layer)
| | | <_UITileLayer: 0x60800023f3c0> (layer)
| | | <_UITileLayer: 0x60800023f360> (layer)
| | | <_UITileLayer: 0x60800023eca0> (layer)
| | <UIImageView: 0x7f9170a7d370; frame = (-39 397.667; 36 2.33333); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x60800023f4c0>>
| | <UIImageView: 0x7f9170a7d560; frame = (258.667 -39; 2.33333 36); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x60800023f5e0>>
| <UIView: 0x7f916ef149c0; frame = (0 587; 354 0); layer = <CALayer: 0x6100006392a0>>
| <UIButton: 0x7f91747a8730; frame = (0 0; 0 0); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x610000639320>>
| | <UIButtonLabel: 0x7f916ef00a80; frame = (0 -5.66667; 0 16); text = 'See More Details'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x610000084d80>>
như bạn phải đoán superview của tôi có 4 subview:
- một stackView (bản thân stackView có một hình ảnh và một stackView khác (stackView này có 2 tùy chỉnh nhãn ))
- một textView
- một cái nhìn
- một nut bâm
Điều này khá mới mẻ đối với tôi, nhưng đã giúp tôi gỡ lỗi khung (và văn bản và kiểu) của chế độ xem. Một trong những chế độ xem phụ của tôi không hiển thị trên màn hình, vì vậy đã sử dụng recursiveDescription và tôi nhận ra chiều rộng của một trong những chế độ xem phụ của tôi là 0
... vì vậy tôi đã sửa các ràng buộc của nó và chế độ xem phụ xuất hiện.