Ionic-framework: 错误:在 Android 上的选项卡之间切换时出现白色闪烁

创建于 2015-06-09  ·  121评论  ·  资料来源: ionic-team/ionic-framework

类型错误

平台: android 4.4 webview

仅在 Android 平台上在选项卡之间切换时,应用程序显示白色闪烁。 不使用人行横道。论坛帖子 http://forum.ionicframework.com/t/white-flash-appearing-when-switching-between-tabs-on-android-in-1-0-0-stable/24774

最有用的评论

看看这个明天的伙计们! :咧嘴笑:

所有121条评论

有关此问题的状态的任何消息?

有同样的问题。 任何更新?

+1

请提供一个有此问题的最小示例。

只需创建一个新的 ionic 应用程序(标签模板),将背景更改为任何颜色,然后是白色。 在 android 设备(4.4,我在 nexus 5 上测试过)上构建并运行,您会注意到每个选项卡更改时都有几毫秒的白色轻弹。

我发现这是由于在每个视图中重新定义了 ion-header-bar。 我将 ion-header-bar 移动到我的主布局模板,不再看到闪烁。 我相信默认生成的项目将标题栏放在每个视图中,这就是您在那里看到它的原因。

'ion-header-bar's 是为我自动生成的,您在哪里(以及如何)手动使用它?

所以@GentryRiggen你的意思是离子导航栏?

@mhartington我正在使用 ion-side-menu 和 ion-side-menu-content 内的 ion-tabs。

<ion-side-menus>
  <ion-side-menu side="left" class="left-side-menu">
    <ion-content drag-content="false" overflow-scroll="false" direction="y" delegate-handle="leftMenu">
      <div class="list">
        <a menu-close class="item item-icon-left" >Something</a>
        <a menu-close class="item item-icon-left" >Something</a>
        <a menu-close class="item item-icon-left" >Something</a>
      </div>
    </ion-content>
  </ion-side-menu>

  <ion-side-menu-content>
    <ion-header-bar align-title="center" class="bar-positive">
      <button class="button button-icon icon ion-navicon" menu-toggle="left"></button>
      <div class="titles">
            <h>TITLE</h1>
      </div>
    </ion-header-bar>

    <ion-tabs class="tabs-positive tabs-icon-only dark-background">
      <ion-tab>
        <ion-nav-view name="tab-1"></ion-nav-view>
      </ion-tab>

      <ion-tab>
        <ion-nav-view name="tab-2"></ion-nav-view>
      </ion-tab>

      <ion-tab>
        <ion-nav-view name="tab-3"></ion-nav-view>
      </ion-tab>
    </ion-tabs>
  </ion-side-menu-content>

</ion-side-menus>

不要为此使用 ion-header-bar,使用 ion-nav-bar。

@mhartington我正在使用“离子导航栏”和屏幕闪烁(在选项卡之间移动时)...
那么你建议如何修复它?

来自为 android 构建的 ionic 的简单选项卡“starter”显示了导航和我相信使用 ion-nav-bar 之间的闪光。

嗯,我在测试中没有看到它。

https://youtu.be/_ja8a08iSPE

您可以在视频中看到它.. 更改选项卡时白屏闪烁.. 它只出现几毫秒...如果您希望看到更清晰,请将背景颜色更改为红色、蓝色或任何深色。

你是在说褪色的导航栏吗

他说的是切换标签页时短暂出现的白屏(离子含量边界)。
当您第一次从“状态”切换到“聊天”时,您可以在视频中清楚地看到它。 但实际上每次都会出现。

@mhartington我在我的应用程序中附上了一个视频(慢动作),你可以清楚地看到它附加在那里。
我想采取行动并帮助你们解决这个问题,但我至少需要从你们那里开始……我应该从哪里开始?

youtube 链接: https :

谢谢。

我查看了代码,对我而言,错误出在 tabSelected 函数(ionTab 指令)中
它似乎在显示新选项卡之前隐藏了上一个选项卡。

我所做的这个肮脏的黑客似乎有效。 但我很想看到一个适当的修复。
只需在 $ionicViewSwitcher.viewEleIsActive(childElement, false) 周围添加一个超时;

ionic.bundle.js 第 55025 行

$timeout(function () {
 $ionicViewSwitcher.viewEleIsActive(childElement, false);
}, 100);

这发生在我身上:

  • 离子,v1.0.1
  • 科尔多瓦 5.3.3

我在 Nexus 4 上运行 Android 5.1.1。

为了重现它,我只是简单地制作了一个“标签”启动应用程序,将导航栏的颜色更改为蓝色(例如,将 -stable 更改为 -positive)并且闪烁变得明显。 它实际上与白色导航栏一起闪烁,但在白色闪烁时您看不到白色。

我尝试添加样式以将 Android 上的转换时间强制为 0 毫秒,并通过检查附加的 chrome 检查器并检查计算的 CSS 值来验证应用程序是否已将这些样式应用于任何标题项。 我通过删除样式并验证它们从 0ms 到其他数字(0.2ms 或 0.5ms - 实际上与闪烁效果一样快)进行了双重检查。

我尝试进行@didbarbosa修复,但浏览器上的 Chrome 和电话应用程序都抱怨未定义 $timeout。 当我记录 $timeout 的值时,它确实没有定义。

@lloy0076你需要将它注入到指令中

IonicModule
.directive('ionTab', [
  '$compile',
  '$ionicConfig',
  '$ionicBind',
  '$ionicViewSwitcher',
  '$timeout',
function($compile, $ionicConfig, $ionicBind, $ionicViewSwitcher,$timeout) {

@didbarbosa - 实际上我只是注意到我的 Ionic 版本不是最新版本; 因此我将“bower.json”更改为:

{
"name": "HelloIonic",
“私人”:“真实”,
“开发依赖”:{
"ionic": "driftyco/ionic-bower#~1",
"platform.js": "平台#~1.3.0"

...您会相信即使没有 $timeout 解决方案也不会闪烁...

也许如果您对 CSS 过渡解决方案尝试相同的方法,它可能只是“修复”自己——尽管我讨厌像这样神奇地修复自己的问题。

是的,它似乎在每晚发布时消失了。
好消息 :)

实际上它对我来说不是固定的。

不适合我 2 :\

有关于这个问题的消息吗?

我在iOS上也有这个问题。

@harryzun关于 iOS 请参阅https://github.com/driftyco/ionic/issues/4395

在 iOS 上,这不是同一个问题

在升级到 v1.1 后的某个时候,我也开始在 Android 上注意到这一点。 虽然不知道什么时候开始。

它开始于 v1

如果有人有(临时)修复,我很想听听。

我是同样的错误……有人有更多信息吗?? :章鱼:

可能不相关,但我之前遇到过类似的问题,出于某种奇怪的原因,从我的状态定义中删除cache: false以解决违规兄弟选项卡状态的问题。 我不知道为什么,因为我们使用相同的模式,使用相同的控制器 + 模板组合,在我们的选项卡设置的其他 3 个地方没有任何问题。

更新

所以我只是花了一点时间试图深入我们看到的问题的根源,这有点有趣,而且我的一点天真导致 stateChangeSuccess 之前的黑色闪烁。

因此,如上所述,我们在整个应用程序中使用相同的模式,但有一个关键区别:该状态实际上在其状态定义中有一个 API 支持的解析,以解决我们目前在后端存在的缺点,而我们没有需要考虑使用此模式的其他 x3 状态。

“聊天”状态是选项卡主状态的兄弟。 要达到此状态,您只需单击主视图中的成员,您就会进入同级聊天状态。 从兄弟节点导航到它时,没有观察到黑色闪光,主状态将可见,直到解析完成,然后正常导航完成。 当使用聊天视图作为历史记录中的当前状态导航回选项卡(从另一个选项卡)时,ui-router + ionic 将立即执行到新选项卡的交换,但黑屏将可见,直到解析完成.

这也说明了为什么删除cache: false并默认为 true 解决了这个问题。

当你想到它时,我猜是完全有道理的。 如果他们通过谷歌偶然发现了这个,希望这可能能让他们头疼(我也是这样做的)。

我追踪到这一行:
https://github.com/driftyco/ionic/blob/af1bfef327e685585244c6051c4d38b98aa6c62a/js/angular/service/viewSwitcher.js#L194

          if (renderStart && renderEnd) {
            // CSS "auto" transitioned, not manually transitioned
            // wait a frame so the styles apply before auto transitioning
            //$timeout(onReflow, 16); <- original
            onReflow(); // removes flicker
          } else if (!renderEnd) {

这是切换选项卡时一帧闪烁的原因,因为新选项卡直到 16 毫秒后才设置为可见。

我不知道该行的点是什么时,标签都参与其中,但如果你更换$timeout用一个简单的方法调用调用onReflow() ,感知的性能有很大的提高,并有不再闪烁。 甚至不在导航栏中。

@mhartington 对此有何想法? 也许它至少应该是可配置的。

似乎是由@adamdbradleyhttps://github.com/driftyco/ionic/commit/8ebde73d0b8afac1bf1c1787c90a72a28a88bc3a引入的

编辑:更好的解决方法似乎是将if条件更改为:

if (direction !== 'swap' && renderStart && renderEnd) {

Edit2:消除任何潜在副作用的更好的解决方法是将$timeout调用替换为:
ionic.requestAnimationFrame(onReflow);
我会用它发送一个 PR。

做得太好了!
解决了我的问题。

非常感谢伙计。

对我不起作用......我已经更新了我的 ionic-angular.js 文件,但即使我增加了初始超时值,我也看不到任何变化。 我错过了什么吗?
对于导航栏闪烁,我使用了此修复程序https://forum.ionicframework.com/t/flickering-when-navigating-via-tabs-on-android/27281但现在内容是闪烁的。

终于它可以工作了,但每个选项卡第一次仍然闪烁一次,知道为什么吗?

有没有关于这个问题的发布计划? 1.2 还是 1.3?

它包含在最近的 1.2 版本中。

+1,还有其他解决方案吗?

哇,这还在进行中。嗯。。是否认为核心团队会很清楚这是什么?有人对我们可以开始试验的源代码有很好的指示吗?

1.2 解决了吗? 那里有一个提交应该解决这个问题。

该错误仍然存​​在于 1.2 到 1.2.2

我又试了一次,如果你把它解决了:

ionic.requestAnimationFrame(onReflow);  

正如他所说,而不是:

$timeout(function() {
              ionic.requestAnimationFrame(onReflow);
            });

显然, $timeout 正在做某事

@mlynch也许您还记得这是做什么用的吗? https://github.com/driftyco/ionic/commit/d0246cf975bb4022eb890d3b0c28964e3065644c#diff -e25bdd32bda2f4f00f01c823ec86b1f3

好像又断了

也许这就是为什么:

如果代码使用 $timeout 排队,它应该在 DOM 被 Angular 操作之后运行,并且在浏览器呈现之后(在某些情况下可能会导致闪烁)

审查 1.2.5

不幸的是,这破坏了 #4782,导致后视图有时无法正确设置动画。 删除$timeout可能是一个过于简单的解决方案。

即使我删除超时仍然有问题..

+1

也有这个问题...

+1

+1

请注意,更新您的 bower.json 有帮助(正确突出显示),但如前所述有一点延迟

{
"name": "HelloIonic",
“私人”:“真实”,
“开发依赖”:{
"ionic": "driftyco/ionic-bower#1.7.12", //这里,确保它已更新
"aws-sdk-js": "~2.0.9",
“引导程序”:“~3.2.0”,
"platform.js": "平台#~1.3.1"
}
}

无论如何,轻微的闪光只是在android上,而且只是几分之一秒。

谁能确认1.2.3 "copenhagen"解决了这个问题?

@mhartington @mlynch我可以确认这仍然不是 1.2.3 版的工作属性。 看看这些截图序列。

我首先像这样开始我的账单标签:
screen shot 2016-01-19 at 2 05 26 pm

然后我点击我的室友选项卡并执行以下步骤(这会导致闪烁):

  1. 应用显示标题为“账单”,但显示缓存的“室友”选项卡
    screen shot 2016-01-19 at 2 05 38 pm
  2. 应用然后删除所有内容,但仍显示“账单”标题
    screen shot 2016-01-19 at 2 05 48 pm
  3. 应用显示“室友”内容
    screen shot 2016-01-19 at 2 05 59 pm
  4. 应用在“室友”标题中淡出
    screen shot 2016-01-19 at 2 06 15 pm

结合所有这些步骤,它在切换标签时会产生可怕的闪烁。

要查看受影响的错误,请观看此视频:
https://dl.dropboxusercontent.com/u/97539058/Bugs/tabs-bug.mp4

嘿,我意识到我的错误是在我的应用程序中使用 SQLite 的问题。 对困惑感到抱歉。

+1

+1

+1

它似乎是超时问题

这个问题对我来说就消失了! 这个问题与我构建标签的方式有关!
确保您以良好的方式构建它,标签内的导航也是如此。 照顾控制器父母 ==> 孩子

不再有白色闪光

@princefr你能详细说明一下吗?

对于 iOS,我必须在 ionic.bundle.js 行 47715 和 47750 中用 css.WebkitTransition 替换 css[ionic.CSS.TRANSITION_DURATION]

`// iOS 转换
// ---------------
provider.transitions.views.ios = function(enteringEle, leaveEle, direction, shouldAnimate) {

function setStyles(ele, opacity, x, boxShadowOpacity) {
  var css = {};
  css.WebkitTransition = d.shouldAnimate ? '' : 0;
  css.opacity = opacity;
  if (boxShadowOpacity > -1) {
    css.boxShadow = '0 0 10px rgba(0,0,0,' + (d.shouldAnimate ? boxShadowOpacity * 0.45 : 0.3) + ')';
  }
  css[ionic.CSS.TRANSFORM] = 'translate3d(' + x + '%,0,0)';
  ionic.DomUtil.cachedStyles(ele, css);
}

var d = {
  run: function(step) {
    if (direction == 'forward') {
      setStyles(enteringEle, 1, (1 - step) * 99, 1 - step); // starting at 98% prevents a flicker
      setStyles(leavingEle, (1 - 0.1 * step), step * -33, -1);

    } else if (direction == 'back') {
      setStyles(enteringEle, (1 - 0.1 * (1 - step)), (1 - step) * -33, -1);
      setStyles(leavingEle, 1, step * 100, 1 - step);

    } else {
      // swap, enter, exit
      setStyles(enteringEle, 1, 0, -1);
      setStyles(leavingEle, 0, 0, -1);
    }
  },
  shouldAnimate: shouldAnimate && (direction == 'forward' || direction == 'back')
};

return d;

};

provider.transitions.navBar.ios = function(enteringHeaderBar, leaveHeaderBar, direction, shouldAnimate) {

function setStyles(ctrl, opacity, titleX, backTextX) {
  var css = {};
  css.WebkitTransition = d.shouldAnimate ? '' : '0ms';
  css.opacity = opacity === 1 ? '' : opacity;

  ctrl.setCss('buttons-left', css);
  ctrl.setCss('buttons-right', css);
  ctrl.setCss('back-button', css);

  css[ionic.CSS.TRANSFORM] = 'translate3d(' + backTextX + 'px,0,0)';
  ctrl.setCss('back-text', css);

  css[ionic.CSS.TRANSFORM] = 'translate3d(' + titleX + 'px,0,0)';
  ctrl.setCss('title', css);
}

function enter(ctrlA, ctrlB, step) {
  if (!ctrlA || !ctrlB) return;
  var titleX = (ctrlA.titleTextX() + ctrlA.titleWidth()) * (1 - step);
  var backTextX = (ctrlB && (ctrlB.titleTextX() - ctrlA.backButtonTextLeft()) * (1 - step)) || 0;
  setStyles(ctrlA, step, titleX, backTextX);
}

function leave(ctrlA, ctrlB, step) {
  if (!ctrlA || !ctrlB) return;
  var titleX = (-(ctrlA.titleTextX() - ctrlB.backButtonTextLeft()) - (ctrlA.titleLeftRight())) * step;
  setStyles(ctrlA, 1 - step, titleX, 0);
}

var d = {
  run: function(step) {
    var enteringHeaderCtrl = enteringHeaderBar.controller();
    var leavingHeaderCtrl = leavingHeaderBar && leavingHeaderBar.controller();
    if (d.direction == 'back') {
      leave(enteringHeaderCtrl, leavingHeaderCtrl, 1 - step);
      enter(leavingHeaderCtrl, enteringHeaderCtrl, 1 - step);
    } else {
      enter(enteringHeaderCtrl, leavingHeaderCtrl, step);
      leave(leavingHeaderCtrl, enteringHeaderCtrl, step);
    }
  },
  direction: direction,
  shouldAnimate: shouldAnimate && (direction == 'forward' || direction == 'back')
};

return d;

};`

当我将这一行https://github.com/driftyco/ionic/blob/master/js/angular/service/viewSwitcher.js#L142更改为:

callback && ionic.requestAnimationFrame(callback);

不确定这是否是解决此问题的正确方法。

这是否也发生在某些 iOS 版本上(请记住该报告是关于 Android 版本的)?

来自:Abdul Wahab [mailto:[email protected]]
发送时间:2016 年 2 月 10 日星期三晚上 9:59
至:driftyco/ionic [email protected]
抄送:David Lloyd [email protected]
主题:回复:[ionic] 错误:在 Android 上的选项卡之间切换时出现白色闪烁 (#3907)

对于 iOS,我必须在 ionic.bundle.js 行 47715 和 47750 中用 css.WebkitTransition 替换 css[ionic.CSS.TRANSITION_DURATION]

`// iOS 转换
// ---------------
provider.transitions.views.ios = function(enteringEle, leaveEle, direction, shouldAnimate) {

函数 setStyles(ele, opacity, x, boxShadowOpacity) {
var css = {};
css.WebkitTransition = d.shouldAnimate ? '':0;
css.opacity = 不透明度;
如果(boxShadowOpacity > -1){
css.boxShadow = '0 0 10px rgba(0,0,0,' + (d.shouldAnimate ? boxShadowOpacity * 0.45 : 0.3) + ')';
}
css[ionic.CSS.TRANSFORM] = 'translate3d(' + x + '%,0,0)';
ionic.DomUtil.cachedStyles(ele, css);
}

无功d = {
运行:函数(步骤){
如果(方向 == '向前'){
setStyles(enteringEle, 1, (1 - step) * 99, 1 - step); // 从 98% 开始防止闪烁
setStyles(leavingEle, (1 - 0.1 * step), step * -33, -1);

} else if (direction == 'back') {
  setStyles(enteringEle, (1 - 0.1 * (1 - step)), (1 - step) * -33, -1);
  setStyles(leavingEle, 1, step * 100, 1 - step);

} else {
  // swap, enter, exit
  setStyles(enteringEle, 1, 0, -1);
  setStyles(leavingEle, 0, 0, -1);
}

},
shouldAnimate: shouldAnimate && (direction == 'forward' || direction == 'back')
};

返回d;

};

provider.transitions.navBar.ios = function(enteringHeaderBar, leaveHeaderBar, direction, shouldAnimate) {

函数 setStyles(ctrl, opacity, titleX, backTextX) {
var css = {};
css.WebkitTransition = d.shouldAnimate ? '':'0ms';
css.opacity = 不透明度 === 1 ? '':不透明度;

ctrl.setCss('buttons-left', css);
ctrl.setCss('buttons-right', css);
ctrl.setCss('back-button', css);

css[ionic.CSS.TRANSFORM] = 'translate3d(' + backTextX + 'px,0,0)';
ctrl.setCss('back-text', css);

css[ionic.CSS.TRANSFORM] = 'translate3d(' + titleX + 'px,0,0)';
ctrl.setCss('title', css);
}

功能输入(ctrlA,ctrlB,步骤){
如果 (!ctrlA || !ctrlB) 返回;
var titleX = (ctrlA.titleTextX() + ctrlA.titleWidth()) * (1 - step);
var backTextX = (ctrlB && (ctrlB.titleTextX() - ctrlA.backButtonTextLeft()) * (1 - step)) || 0;
setStyles(ctrlA, step, titleX, backTextX);
}

功能离开(ctrlA,ctrlB,步骤){
如果 (!ctrlA || !ctrlB) 返回;
var titleX = (-(ctrlA.titleTextX() - ctrlB.backButtonTextLeft()) - (ctrlA.titleLeftRight())) * step;
setStyles(ctrlA, 1 - step, titleX, 0);
}

无功d = {
运行:功能(步骤){
var enterHeaderCtrl = enterHeaderBar.controller();
var leaveHeaderCtrl = leaveHeaderBar && leaveHeaderBar.controller();
if (d.direction == 'back') {
离开(进入HeaderCtrl,离开HeaderCtrl,1 - 步);
输入(离开HeaderCtrl,进入HeaderCtrl,1 - 步骤);
} 别的 {
输入(进入HeaderCtrl,离开HeaderCtrl,步骤);
离开(离开HeaderCtrl,进入HeaderCtrl,步骤);
}
},
方向:方向,
shouldAnimate: shouldAnimate && (direction == 'forward' || direction == 'back')
};

返回d;

};`


直接回复本邮件或在 GitHub 上查看https://github.com/driftyco/ionic/issues/3907#issuecomment -182324500 。 https://github.com/notifications/beacon/ABHsBD1Sp3tXsq8707UTfdVHgqSlxI0zks5pixaSgaJpZM4E82pl.gif

+1
在安卓上闪烁..

1+

+1

伙计们只是在您的“状态”中“缓存:真”,以便您的页面在提取和渲染顺利进行之前被缓存

@Harish-here 第一次呢?

是的,使用缓存确实不是一个好主意:true 仅用于这些目的

@Harish-这里。 . 我有一个对不同页面使用相同状态的应用程序。 即它是一个详细视图,需要一些 $state 参数。 由于具有不同内容的相同视图,我不能使用 cache:false :)
对于这个特定问题,这似乎也不是一个好主意

在这里运行 1.2.4-nightly-1917 仍然是同样的问题

+1

@princefr - 是的,请详细说明选项卡的正确标记是什么来缓解这个问题

@princefr请您详细说明选项卡结构

这对我来说仍然是一个问题,而且非常令人沮丧。 是否有任何动向或任何可理解的解决方案?

+1

+1

看看这个明天的伙计们! :咧嘴笑:

有一个与 iOS 相关的问题,我将在今晚晚些时候链接到这里。 我能够重现它。

谢谢@mhartington!

为了添加更多上下文,在我的情况下,我发现该错误存在于以下内容中:

索引.html
<ion-nav-view></ion-nav-view>

视图-1.html
<ANY ELEMENT>Something</ANY ELEMENT><ion-nav-view></ion-nav-view>

子视图-1.html
<ANY></ANY>

但是当我从 view-1.html 中删除<ANY ELEMENT>时不存在。

因此,就我而言,在不完全替换父状态内容的情况下,我无法实现在父状态内显示子状态的预期效果。

我尝试了所有方式的 ui-view/ion-view/ion-nav-view/ion-tabs/ion-pane/等。 绝对没有任何效果。

此问题描述了相同的错误,但在 iOS https://github.com/driftyco/ionic/issues/5888

@mhartington你能用会议应用程序测试吗? 我和@brandy在切换标签时都能够重现一些轻微的闪光。 这是使用模拟器而不是实际设备。

不过,#5888 中的错误是针对 ionic2 的,我不确定代码库是否足够相似以使其成为相同的错误。

嘿,你们,感谢您对这件事的耐心,非常感谢 :smile:

所以看看事情,这应该影响iOS和Android ionic 1.2.4,对吗?

另外,有没有人能够使用标签启动器应用程序重新创建它?

@mhartington它在选项卡入门应用程序中,您只需要非常细心。 另外,我在https://github.com/driftyco/ionic/pull/4654 中修复了这个问题,但显然它破坏了其他东西,然后当它得到修复时,它又被破坏了。

您可以在您发布的视频中看到它: https :

@andreialecu好吧,也看到了,

https://youtu.be/R5EafRKTst0

相同的剪辑,只是放慢了很多

查看 PR,看看可以做什么,并防止它破坏其他东西 :grin:

大家好! 所以我想我已经能够在这方面取得一些进展。 我已经打开了一个在我的测试中看起来不错的 PR,但很想先听到你的一些反馈。

对 viewFlicker 分支进行了更改

https://github.com/driftyco/ionic/pull/5937

如果你不介意拉下代码,从源代码构建 Ionic,并测试你的应用程序中的更改,我们可以看看这是否能解决问题并解决这个错误 :shipit:

惊人的。 这是一个 android 特定的狐狸还是 iOS 也会更好看?

@ctcampbell安卓 ATM。 在我的测试中,我无法在 iOS 上引起闪烁

这是演示 PR 的快速视频

https://youtu.be/nWSuocu64FU

+1

@jordantomax这是否意味着 PR 对您很有效? :咧嘴笑:

哎呀,不后悔。 只需订阅提要。 不过我可以测试一下。 我是否需要编译一些东西才能使用,我看到你的提交没有触及发布。

啊啊

您可以按照以下步骤操作。

git clone https://github.com/driftyco/ionic.git
cd ionic 
git checkout viewFlicker
npm install
gulp build

你应该在dist/js/ionic.bundle.js有编译好的代码
您应该能够将该代码复制/粘贴到测试项目中并进行尝试。

似乎在测试选项卡应用程序中运行良好。 尽管如此,我仍然在我的应用程序中遇到闪烁问题。 我正在使用标签和菜单,但标签只出现在某些页面上。 我想拍个视频给你看,我该怎么做?

您能否创建一个我可以克隆和测试的最小 codepen 或 git repo?
只是您的应用程序的类似设置

好主意。 我今晚或明天早上会努力做到这一点。 谢谢你的帮助。

@mhartington我刚刚在我的应用程序中测试了它,闪烁似乎消失了。 :+1:

我已经在运行 Android N 预览版的 Nexus 6、运行 6.0.1 的 Nexus 7 2013、运行 5.1 的 Moto X 2014 和运行 4.4.4 的 Nexus 7 2013 上使用选项卡启动器测试了修复程序,但没有看到任何闪烁任何这些设备。 惊人的 !

@jordantomax把那个例子放在一起有什么运气吗?

@mhartington抱歉,完全被淹没了! 我希望在星期天努力。

@mhartington我刚刚在我正在构建的应用程序上对此进行了测试,而 android 和 iPhone 似乎已通过 #5937 修复。

@jordantomax ,你有没有机会整理一个例子?

谢谢,

你好呀,

此修复程序运行良好,但看起来 native-page-transitions 插件无法正常工作......在我放置此修复程序后,转换正在做疯狂的事情。 你认为它有联系吗?

@tgensol为此插件使用默认参数,它与此修复程序配合良好!

大家好! 通过我的测试和你们测试修复程序似乎正在起作用,我将继续并暂时关闭此问题。 @jordantomax如果您有机会一起进行该测试,请随时发布,我很乐意重新打开(:. 另外, @tgensol如果上述解决方案不能解决您的问题,您是否介意在错误时间打开一个单独的问题?谢谢大家!

随着 ionic repo 的重大变化,我们如何编译和构建它

1.x分支现在是 Ionic 1.3.1 。 如果您克隆 repo 并签出分支,您应该能够运行gulp build来生成可分发文件。 如果您对此有任何问题,请告诉我。

谢谢,

谢谢。 已经手动下载了 dist :D

+1

我已经解决了这个问题。 这与离子视图更新离子条行为有关:在进入之前创建新条并隐藏旧条(当前)并闪烁。 解决方案是将隐藏当前栏推迟到输入事件之后。 如果您有任何问题,请写信给我。

@smcreator你能分享代码片段吗?

我仍然遇到同样的问题......任何代码片段谢谢

我认为这个问题在最近的离子版本中得到了解决。

我遇到了同样的问题, @princefr的回应是关键。 我在视图上有多个导航栏。 仅在tabs.html文件顶部添加ion-nav-bar时,我解决了问题:

<ion-nav-bar class="my-custom-bar">
  <ion-nav-back-button class="button-clear">
    <i  class="button button-icon ion-android-arrow-back" ng-click="vm.goBack()"></i>
  </ion-nav-back-button>
</ion-nav-bar>

<ion-tabs>
....
</ion-tabs>

感谢您的问题! 此问题已被锁定,以防止发表与原始问题无关的评论。 如果使用最新版本的 Ionic 仍然存在问题,请创建一个新问题并确保模板已完整填写。

此页面是否有帮助?
0 / 5 - 0 等级