Ich habe zwei ViewControllers
- Slider
& Foo
. Ich füge Slider
als Foo
subview
und es ist Rahmen in Foo
VC Einstellung, aber Slider
‚s Rahmen nicht ändert -> Ich kann sehen, dass nur x
& y
angewendet werden. Wie sollte ich meinen Code ändern, um Slider
mit Slider(initWithFrame: CGFrame)
initialisieren zu können? Oder was ist eine bevorzugte Möglichkeit, um die Größe Slider
von der Foo
VC zu setzen?Swift: Programmgesteuert VC-Frame von einem anderen VC
// slider.swift
import UIKit
class Slider: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
var collectionView: UICollectionView?
override func viewDidLoad() {
super.viewDidLoad()
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.minimumLineSpacing = 0
layout.sectionInset = UIEdgeInsets.zero
layout.itemSize = self.view.frame.size
layout.scrollDirection = UICollectionViewScrollDirection.horizontal
collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
collectionView?.dataSource = self
collectionView?.delegate = self
collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
collectionView?.backgroundColor = UIColor.white
collectionView?.isPagingEnabled = true
self.view.addSubview(collectionView!)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 14
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
cell.backgroundColor = UIColor.red
return cell
}
}
// foo.swift
import UIKit
class Foo: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
slider = Slider();
slider!.view.frame = CGRect(x: 50, y: 50, width: 20, height: 20)
self.view.addSubview(slider!.view)
self.addChildViewController(slider!)
}
}
Eine Sache, die mich herausspringt ist die * Größe * Ihrer * Slider * - hoffentlich ist es viel größer in der Realität. 20x20 ist wahrscheinlich viel zu klein für eine UICollectionView (und aus dem Namen ein UISlider). Das heißt, Sie können ein * init (frame:) * für 'Slider' kodieren - eines, das Swift ** immer benutzt hat, nicht * init (withFrame:) * - aber Sie wollen sich wahrscheinlich mit' Slider' beschäftigen Subview-Layout in seiner * viewDidLoadSubviews * überschreiben. – dfd