首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >整个视图都是从左上角进入的。

整个视图都是从左上角进入的。
EN

Stack Overflow用户
提问于 2021-04-01 07:04:50
回答 1查看 137关注 0票数 0

嘿网上读取器,

我正在构建一个小功能,我的横幅动画从顶部使用Snapkit和组合。在我的viewDidLoad中,我调用了setupObservers,它在下面创建了这个发布者。

在我的应用程序中,isShown会被切换,这样当第一次看到视图时,发布者就会触发,这不仅会导致横幅,还会导致整个视图从左上角0,0位置移动。

我知道这是因为我调用了self.view.layoutIfNeeded(),我只是好奇如何减轻这个问题,这样我就可以在没有动画的情况下加载视图,然后显示横幅。

谢谢!

代码语言:javascript
运行
AI代码解释
复制
    public override func viewDidLoad() {
        super.viewDidLoad()

        setupObservers()

        viewStore.send(.viewDidLoad)
    }
代码语言:javascript
运行
AI代码解释
复制
        viewStore.publisher
            .banner
            .isShown
            .sink { isShown in
                guard self.initLoadFinished else { return }

                UIView.animate(withDuration: Metrics.animationDuration, delay: 0, options: .curveEaseInOut) {
                    self.banner.snp.updateConstraints {
                        if isShown {
                            self.topConstraint = $0.top.equalToSuperview()
                        } else {
                            self.topConstraint = $0.top.equalToSuperview().offset(-Metrics.bannerHeight)
                        }
                    }
                    self.view.layoutIfNeeded()
                }
            }.store(in: &cancellables)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-01 07:06:55

从动画块中获取常量设置

代码语言:javascript
运行
AI代码解释
复制
self.banner.snp.updateConstraints {
    if isShown {
         self.topConstraint.update(offset: 0)  
    } else {
         self.topConstraint.update(offset:-Metrics.bannerHeight)
    }
}  
UIView.animate(withDuration: Metrics.animationDuration, delay: 0, options: .curveEaseInOut) { 
    self.view.layoutIfNeeded() 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66907000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档