
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 – 动画导航栏颜色所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)