热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS11UIStackView按比例填充会导致奇怪的视图加载动画

如何解决《iOS11UIStackView按比例填充会导致奇怪的视图加载动画》经验,为你挑选了1个好方法。

如果我设置:

stackView.distributon = .fillProportionally 

然后在iOS 11上,当加载包含此堆栈视图的视图时,我得到一个非常奇怪的动画(所有子视图 - 不仅仅是堆栈视图 - 从屏幕的顶部或底部飞行).在较低的iOS版本上一切正常.如果我将堆栈视图的分布设置为其他任何东西,那么一切也正常.

有谁知道这个问题的原因是什么?

谢谢.



1> 小智..:

我想我已经找到了一个修复 - self.view.layoutIfNeeded()animations块中调用.

这是我的复制品:

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() }
        )
    }
}

该控制器设置UIStackView有两个垂直视图,绿色(A)和橙色(B).点击按钮隐藏/取消隐藏视图B.

如果我具有self.view.layoutIfNeeded()animations块,那么,当正在显示图B,它在从屏幕的顶部苍蝇.(当视图B被隐藏时,它会正常隐藏 - 从屏幕底部向下移动.)

当我添加self.view.layoutIfNeeded()animations块时,视图B按预期显示 - 它从屏幕底部出现.

感谢来自@ g3rv4的回答,指出我朝着这个方向前进!


推荐阅读
author-avatar
娇Rex_630
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有