Left margin is not respected in view controller snapshot images on iPhone 8/SE in landscape
tinder-cfuller opened this issue · comments
Describe the bug
Left margin is not respected in view controller snapshot images on iPhone 8/SE in landscape even though the left margin is reflected in the recursive description (and respected when running the app in the simulator).
To Reproduce
Sample Project:
View Controller:
class ViewController: UIViewController {
let blueView: UIView = {
let view = UIView()
view.backgroundColor = .blue
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(blueView)
NSLayoutConstraint.activate([
blueView.topAnchor.constraint(equalTo: view.layoutMarginsGuide.topAnchor),
blueView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),
blueView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),
blueView.bottomAnchor.constraint(equalTo: view.layoutMarginsGuide.bottomAnchor)
])
}
}
Test:
final class SampleTests: XCTestCase {
func testViewController() throws {
let device: ViewImageConfig = .iPhone8(.landscape)
let vc = ViewController()
assertSnapshot(matching: vc, as: .recursiveDescription(on: device))
assertSnapshot(matching: vc, as: .image(on: device))
}
}
Recursive Description:
The left margin of 20 is reflected in the x
of the frame
.
<UIView; frame = (20 0; 627 375); backgroundColor = UIExtendedSRGBColorSpace 0 0 1 1; layer = <CALayer>>
Snapshot Image:
The left margin is incorrectly not respected.
![testViewController 2](https://private-user-images.githubusercontent.com/22668017/256392418-eafd25b3-8f0a-4e96-a117-9c32cafaf137.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTU2Mzk5NzUsIm5iZiI6MTcxNTYzOTY3NSwicGF0aCI6Ii8yMjY2ODAxNy8yNTYzOTI0MTgtZWFmZDI1YjMtOGYwYS00ZTk2LWExMTctOWMzMmNhZmFmMTM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTEzVDIyMzQzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ5ODNiODVjYjlmOGIwOGMyZjgxMTY3NGMzZGE4MWJkMzUxMjBmN2RmY2I2ZTEyYjU1Y2QwNmVjOWY5NzNiODcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qnbmkQpSDhzAgzYyq4pkL1hQV13hFqV26McTv371Urk)
Expected behavior
The left margin should be correctly respected in view controller snapshot images on iPhone 8/SE in landscape.
For example, the left margin is respected when running the app in the simulator.
Simulator Screenshot:
![Screenshot 2023-07-26 at 5 12 20 PM](https://private-user-images.githubusercontent.com/22668017/256392949-19bf95c8-dc69-4fb3-b3e5-78449dc3ac3b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTU2Mzk5NzUsIm5iZiI6MTcxNTYzOTY3NSwicGF0aCI6Ii8yMjY2ODAxNy8yNTYzOTI5NDktMTliZjk1YzgtZGM2OS00ZmIzLWIzZTUtNzg0NDlkYzNhYzNiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA1MTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNTEzVDIyMzQzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2MTkyNWQ5NDMzNWRkMTc3OWI3ODAxM2RmN2ZiZWY4OWNhYzhmNmYyMjNmNDg4NDA3Y2ZjMWU2YmUwNmU3MWUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.KYdgzN-mE8dlbov6tlX6_hsUNW52E_dBqoQuJRaNTUI)
Environment
- swift-snapshot-testing version
1.11.1
- Xcode
14.3.1
- Swift
5.8
- OS:
iOS 16.4
I just tested the above ☝️ proposed fix in the sample app attached to this issue and it worked 👍
Thank you @leohemanth!