Sanırım bir düzeltme buldum - numarasını animations
satırında arayın.
import UIKit
class ViewController: UIViewController {
var showB = true
weak var viewB: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let viewA = UIView()
viewA.backgroundColor = UIColor.green
let toggleViewBButtonAnimated = UIButton(frame: CGRect(x: 50, y: 150, width: 200, height: 40))
toggleViewBButtonAnimated.backgroundColor = UIColor.cyan
toggleViewBButtonAnimated.setTitle("Toggle B (animated)", for: .normal)
viewA.addSubview(toggleViewBButtonAnimated)
toggleViewBButtonAnimated.addTarget(self, action: #selector(toggleBButtonTappedAnimated), for: .touchUpInside)
let viewB = UIView()
viewB.backgroundColor = UIColor.orange
let viewBHeightConstraint = viewB.heightAnchor.constraint(equalToConstant: 200)
viewBHeightConstraint.priority = 999
viewBHeightConstraint.isActive = true
self.viewB = viewB
let stackView = UIStackView(arrangedSubviews: [viewA, viewB])
stackView.axis = .vertical
stackView.alignment = .fill
stackView.distribution = .fill
stackView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackView)
stackView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
}
@IBAction func toggleBButtonTappedAnimated() {
self.showB = !self.showB
UIView.animate(withDuration: 0.3,
animations: { self.viewB.isHidden = !self.showB; self.view.layoutIfNeeded() }
)
}
}
Bu kontrolör kurar iki dikey manzarası, yeşil bir (A) ve turuncu bir (B) sahip bir UIStackView
:
İşte benim üreme var. Ben değilanimations
blokta self.view.layoutIfNeeded()
var yaparsanız düğme gizler delik/unhides B.
görüntülemek görünümü B gösteriliyor zaman, o zaman, bu ekranın üstünden uçar. (B görünüşü, gizli olan, normal olarak gizler - ekranın alt kısmına aşağı hareket). I animations
bloğuna self.view.layoutIfNeeded()
ilave
, B görünüşü, beklendiği gibi gösterir - ekranın altından gelir .
Bana bu yönde işaret ettiğin için @ g3rv4 cevabı sayesinde!
Bunun için bir çözüm buldunuz mu? Yığın görünümü 'Doldur' dağılımı (varsayılan) olarak ayarlanmış olsa da, ekranın üst kısmından uçan görünümler ile benzer bir sorun yaşıyorum. Xcode 9 GM tohum ve iOS 11 GM tohumunu kullanarak. –
'stackview.distributon = .fillProportionally' ayarlanmadan hemen önce' self.view.layoutIfNeeded() 'işlevini çağırdı. – kiwisip
@MattCline Aynı sorunu yaşıyorum ... :(Herhangi Bir Fikir nasıl düzeltilir? – kmithi