swift – 动画导航栏颜色

swift – 动画导航栏颜色,第1张

概述当我d回到前一个控制器时,我试图设置导航栏颜色的变化.为了给它一些上下文,我有一个控制器A,它是一个collectionView控制器,并有一个不透明的导航栏颜色设置: self.navigationController?.navigationBar.barTintColor = UIColor.rgb(red: 244, green: 67, blue: 54)self.navigationC 当我d回到前一个控制器时,我试图设置导航栏颜色的变化.为了给它一些上下文,我有一个控制器A,它是一个collectionVIEw控制器,并有一个不透明的导航栏颜色设置:
self.navigationController?.navigationbar.barTintcolor = UIcolor.rgb(red: 244,green: 67,blue: 54)self.navigationController?.navigationbar.tintcolor = .whiteself.navigationController?.navigationbar.TitleTextAttributes = [NSForegroundcolorAttributename : UIcolor.white]self.navigationController?.navigationbar.isTranslucent = false

一旦选择了collectionVIEwCell,我就会推送到下一个控制器B,导航栏被改变为透明:

self.navigationController?.navigationbar.setBackgroundImage(UIImage(),for: .default)self.navigationController?.navigationbar.shadowImage = UIImage()self.navigationController?.navigationbar.isTranslucent = true

当用户点击后箭头时,我希望navigationbar返回其原始颜色.我在控制器B的vIEwWilldissappear函数,willMove(toparentVIEwController)和Controller A上的vIEwWillAppear函数上尝试了一个简单的UIVIEw动画

这是动画:

UIVIEw.animate(withDuration: 0.5) {   self.navigationController?.navigationbar.barTintcolor = UIcolor.rgb(red: 244,blue: 54)   self.navigationController?.navigationbar.setBackgroundImage(nil,for: .default)   self.navigationController?.navigationbar.shadowImage = nil   self.navigationController?.navigationbar.isTranslucent = false   self.navigationController?.navigationbar.layoutIfNeeded()}

在这之后,我尝试使用转换协调器,但得到了相同的结果:

guard let coordinator = self.TransitionCoordinator else {        return    }coordinator.animate(alongsIDeTransition: {    [weak self] context in   self?.navigationController?.navigationbar.barTintcolor = UIcolor.rgb(red: 244,blue: 54)   self?.navigationController?.navigationbar.setBackgroundImage(nil,for: .default)   self?.navigationController?.navigationbar.shadowImage = nil   self?.navigationController?.navigationbar.isTranslucent = false   self?.navigationController?.navigationbar.layoutIfNeeded()},completion: nil)

似乎无论我尝试什么,或者我把代码放在哪里,我总会得到相同的结果.我知道代码是重复的,但我只是想弄清楚原因,所以发生了很多复制和粘贴.

据我所知,我认为它与前一个控制器的背景视图有关,但我很难过,我似乎在导航栏下的动画之前看到一个黑屏.任何帮助将不胜感激.

谢谢

细节

xCode 8.3.2,swift 3.1

overrIDe func vIEwWillAppear(_ animated: Bool) {    if let navigationbar = self.navigationController?.navigationbar {        navigationbar.backgroundcolor = .blue    }}

完整样本

VIEwController

import UIKitclass VIEwController: UIVIEwController {    overrIDe func vIEwWillAppear(_ animated: Bool) {        if let navigationbar = self.navigationController?.navigationbar {            navigationbar.barTintcolor = UIcolor(red: 244/255,green: 67/255,blue: 54/255,@R_403_5997@: 1.0)            navigationbar.tintcolor = .white            navigationbar.TitleTextAttributes = [NSForegroundcolorAttributename : UIcolor.white]            navigationbar.isTranslucent = false        }    }}

VIEwController2

import UIKitclass VIEwController2: UIVIEwController {    overrIDe func vIEwWillAppear(_ animated: Bool) {        if let navigationbar = self.navigationController?.navigationbar {            let color = UIcolor(red: 1,green: 153/255,blue: 0,@R_403_5997@: 1.0)            navigationbar.setBackgroundImage(UIImage.imageWithcolor(color: color),for: .default)            navigationbar.shadowImage = UIImage()            navigationbar.isTranslucent = true        }    }    overrIDe func vIEwWilldisappear(_ animated: Bool) {        if let navigationbar = self.navigationController?.navigationbar {            navigationbar.setBackgroundImage(nil,for: .default)            navigationbar.shadowImage = nil            navigationbar.isTranslucent = false        }    }}

extension UIImage

import UIKitextension UIImage {    class func imageWithcolor(color: UIcolor) -> UIImage {        let rect = CGRect(x: 0,y: 0,wIDth: 1,height: 1)        UIGraphicsBeginImageContextWithOptions(CGSize(wIDth: 1,height: 1),false,0)        color.setFill()        UIRectFill(rect)        let image = UIGraphicsGetimageFromCurrentimageContext()!        UIGraphicsEndImageContext()        return image    }}

Main.storyboard

<?xml version="1.0" enCoding="UTF-8"?><document type="com.apple.InterfaceBuilder3.Cocoatouch.Storyboard.XIB" version="3.0" toolsversion="12120" systemVersion="16F73" targetRuntime="iOS.Cocoatouch" propertyAccessControl="none" useautolayout="YES" useTraitCollections="YES" colorMatched="YES" initialVIEwController="Tzy-ol-uu0">    <device ID="retina4_7" orIEntation="portrait">        <adaptation ID="fullscreen"/>    </device>    <dependencIEs>        <deployment IDentifIEr="iOS"/>        <plugIn IDentifIEr="com.apple.InterfaceBuilder.IBCocoatouchPlugin" version="12088"/>        <capability name="documents saved in the Xcode 8 format" minToolsversion="8.0"/>    </dependencIEs>    <scenes>        <!--VIEw Controller-->        <scene sceneID="tne-QT-ifu">            <objects>                <vIEwController ID="BYZ-38-t0r" customClass="VIEwController" customModule="stackowerflow_44343355" customModuleProvIDer="target" sceneMemberID="vIEwController">                    <layoutGuIDes>                        <vIEwControllerLayoutGuIDe type="top" ID="y3c-jy-aDJ"/>                        <vIEwControllerLayoutGuIDe type="bottom" ID="wfy-db-euE"/>                    </layoutGuIDes>                    <vIEw key="vIEw" contentMode="scaletoFill" ID="8bC-Xf-vdC">                        <rect key="frame" x="0.0" y="0.0" wIDth="375" height="667"/>                        <autoresizingMask key="autoresizingMask" wIDthSizable="YES" heightSizable="YES"/>                        <subvIEws>                            <button opaque="NO" contentMode="scaletoFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="mIDdleTruncation" translatesautoresizingMaskIntoConstraints="NO" ID="eIC-Nm-Ex7">                                <rect key="frame" x="164" y="318" wIDth="46" height="30"/>                                <state key="normal" title="button"/>                                <connections>                                    <segue destination="QHs-H4-fAS" kind="show" ID="Rff-Eq-K6g"/>                                </connections>                            </button>                        </subvIEws>                        <color key="backgroundcolor" red="1" green="1" blue="1" @R_403_5997@="1" colorSpace="custom" customcolorSpace="sRGB"/>                        <constraints>                            <constraint firstItem="eIC-Nm-Ex7" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" ID="G1g-VM-MAn"/>                            <constraint firstItem="eIC-Nm-Ex7" firstAttribute="centerY" secondItem="8bC-Xf-vdC" secondAttribute="centerY" ID="mdZ-GP-EQw"/>                        </constraints>                    </vIEw>                    <navigationItem key="navigationItem" ID="hq3-zt-U4K"/>                </vIEwController>                <placeholder placeholderIDentifIEr="IBFirstResponder" ID="dkx-z0-nzr" sceneMemberID="firstResponder"/>            </objects>            <point key="canvasLocation" x="977" y="791"/>        </scene>        <!--VIEw Controller2-->        <scene sceneID="F9C-Nz-6dd">            <objects>                <vIEwController ID="QHs-H4-fAS" customClass="VIEwController2" customModule="stackowerflow_44343355" customModuleProvIDer="target" sceneMemberID="vIEwController">                    <layoutGuIDes>                        <vIEwControllerLayoutGuIDe type="top" ID="AV0-X8-nhX"/>                        <vIEwControllerLayoutGuIDe type="bottom" ID="AsY-Gl-67v"/>                    </layoutGuIDes>                    <vIEw key="vIEw" contentMode="scaletoFill" ID="1fA-pX-rzR">                        <rect key="frame" x="0.0" y="0.0" wIDth="375" height="667"/>                        <autoresizingMask key="autoresizingMask" wIDthSizable="YES" heightSizable="YES"/>                        <color key="backgroundcolor" white="1" @R_403_5997@="1" colorSpace="calibrateDWhite"/>                    </vIEw>                </vIEwController>                <placeholder placeholderIDentifIEr="IBFirstResponder" ID="Uzd-Tb-KRO" userLabel="First Responder" sceneMemberID="firstResponder"/>            </objects>            <point key="canvasLocation" x="1770" y="789"/>        </scene>        <!--Navigation Controller-->        <scene sceneID="Jff-OO-3e7">            <objects>                <navigationController automaticallyAdjustsScrollVIEwInsets="NO" ID="Tzy-ol-uu0" sceneMemberID="vIEwController">                    <toolbaritems/>                    <navigationbar key="navigationbar" contentMode="scaletoFill" ID="804-YF-T6T">                        <rect key="frame" x="0.0" y="0.0" wIDth="375" height="44"/>                        <autoresizingMask key="autoresizingMask"/>                    </navigationbar>                    <nil name="vIEwControllers"/>                    <connections>                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootVIEwController" ID="BRB-ym-7I2"/>                    </connections>                </navigationController>                <placeholder placeholderIDentifIEr="IBFirstResponder" ID="M6i-ib-61I" userLabel="First Responder" sceneMemberID="firstResponder"/>            </objects>            <point key="canvasLocation" x="140" y="791.15442278860576"/>        </scene>    </scenes></document>
总结

以上是内存溢出为你收集整理的swift – 动画导航栏颜色全部内容,希望文章能够帮你解决swift – 动画导航栏颜色所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1046743.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存