As an alternative of including mainView on to superview, wrap it in a containerView that spans the total width of superview. Then, shift mainView inside this container utilizing a number one constraint. Instance utilizing UIKit –
class ViewController: UIViewController {
let superview = UIView()
let mainView = UIView()
let containerView = UIView()
let collectionView = UICollectionView(body: .zero, collectionViewLayout: UICollectionViewFlowLayout())
override func viewDidLoad() {
tremendous.viewDidLoad()
// Add containerView to superview
superview.addSubview(containerView)
containerView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
containerView.topAnchor.constraint(equalTo: superview.topAnchor),
containerView.bottomAnchor.constraint(equalTo: superview.bottomAnchor),
containerView.leadingAnchor.constraint(equalTo: superview.leadingAnchor),
containerView.trailingAnchor.constraint(equalTo: superview.trailingAnchor)
])
// Add mainView to containerView with an offset
containerView.addSubview(mainView)
mainView.translatesAutoresizingMaskIntoConstraints = false
let offset: CGFloat = x // Replace with desired worth
NSLayoutConstraint.activate([
mainView.topAnchor.constraint(equalTo: containerView.topAnchor),
mainView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor),
mainView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: offset),
mainView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor)
])
// Add collectionView inside mainView (Assuming it takes full width)
mainView.addSubview(collectionView)
collectionView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
collectionView.topAnchor.constraint(equalTo: mainView.topAnchor),
collectionView.bottomAnchor.constraint(equalTo: mainView.bottomAnchor),
collectionView.leadingAnchor.constraint(equalTo: mainView.leadingAnchor),
collectionView.trailingAnchor.constraint(equalTo: mainView.trailingAnchor)
])
// Alter collectionView contentInset to permit full scrolling
collectionView.contentInset = UIEdgeInsets(prime: 0, left: -offset, backside: 0, proper: 0)
}
}