Я использую PopupDialog Orderella , чтобы показать горизонтальный вид прокрутки во всплывающем диалоговом окне.
Я программно создал пользовательский вид прокрутки с нумерацией страниц и передал его PopupDialog
, однакосодержимое прокрутки имеет большую ширину.
![enter image description here](https://i.stack.imgur.com/x20Sm.png)
Как видите, хотя текст метки выровнен по центру, онне в центре, так как его ширина шире.Я попытался поиграть с шириной кадра, но не смог выяснить, в чем дело.
Передача пользовательского вида в PopupDialog
.Я не устанавливаю предпочитаемую ширину.
let scrollVC = WalkthroughController()
// Create the dialog
let popup = PopupDialog(viewController: scrollVC,
buttonAlignment: .horizontal,
transitionStyle: .bounceDown,
tapGestureDismissal: true,
Класс WalkhowController:
class WalkthroughController: UIViewController, UIScrollViewDelegate {
var images = ["1","2","3"]
var walkthroughTexts = ["Welcome!\nakasdfkasd;fjasl;dk", "asdfasdfasdfasdkfhlkj", "asdf;lkjasdl;kfjl;kasdfj;lkasdjflk;sdajflk;asj;l"]
var frame = CGRect(x: 0, y: 0, width: 0, height: 0)
let scrollViewHeight: CGFloat = 500
let pageControlHeight: CGFloat = 30
lazy var pageControl: UIPageControl = {
let pc = UIPageControl(frame: CGRect(x: 0, y: scrollViewHeight, width: view.frame.width, height: pageControlHeight))
pc.currentPageIndicatorTintColor = .red
pc.pageIndicatorTintColor = .darkGray
pc.backgroundColor = .white
pc.numberOfPages = images.count
return pc
}()
lazy var scrollView: UIScrollView = {
let sv = UIScrollView(frame: CGRect(x: 0, y: 0, width: (view.frame.width), height: scrollViewHeight))
sv.isPagingEnabled = true
return sv
}()
fileprivate func setupView() {
view.addSubview(scrollView)
view.addSubview(pageControl)
view.heightAnchor.constraint(equalToConstant: (scrollViewHeight+pageControlHeight)).isActive = true
}
override func viewDidLoad() {
super.viewDidLoad()
setupView()
for index in 0..<images.count {
frame.origin.x = scrollView.frame.size.width * CGFloat(index)
frame.size = scrollView.frame.size
let wtView = CustomView4WalkThrough(frame: frame)
wtView.imageView.image = UIImage(named: images[index])
wtView.label.text = walkthroughTexts[index]
self.scrollView.addSubview(wtView)
}
scrollView.contentSize = CGSize(width: (scrollView.frame.width * CGFloat(images.count)), height: scrollView.frame.height)
scrollView.delegate = self
}
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
let pageNumber = scrollView.contentOffset.x / scrollView.frame.size.width
pageControl.currentPage = Int(pageNumber)
}
}
class CustomView4WalkThrough: UIView {
let label: UILabel = {
let label = UILabel()
label.font = UIFont.systemFont(ofSize: 13)
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
label.backgroundColor = .red
return label
}()
let imageView: UIImageView = {
let imageView = UIImageView()
imageView.translatesAutoresizingMaskIntoConstraints = false
imageView.backgroundColor = .yellow
return imageView
}()
func setupLayout() {
addSubview(imageView)
addSubview(label)
NSLayoutConstraint.activate([
imageView.leadingAnchor.constraint(equalTo: safeAreaLayoutGuide.leadingAnchor),
imageView.trailingAnchor.constraint(equalTo: safeAreaLayoutGuide.trailingAnchor),
imageView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor, constant: 10),
imageView.heightAnchor.constraint(equalToConstant: 400),
label.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 10),
label.leadingAnchor.constraint(equalTo: imageView.leadingAnchor),
label.trailingAnchor.constraint(equalTo: imageView.trailingAnchor),
label.heightAnchor.constraint(equalToConstant: 100)
])
}
override init(frame: CGRect) {
super.init(frame: frame)
setupLayout()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Я что-то не так делаю в ограничениях автоматического размещения?
Когда WalkthroughController
вызывается напрямую, т.е. не вызывается PopupDialog
, он работает нормально.
![enter image description here](https://i.stack.imgur.com/GKKjp.png)