react-navigationメモ(2)を使用してヘッダーメニュー項目をカスタマイズ
3055 ワード
react-navigationを使用してheaderRightメニューコンポーネントを実装します.
日常のくだらない話
前の記事では、
この水文ではheaderの右のメニュー項目をどのように実現するかを説明します.しばらくIOSだけを支持して、原因は後で説明して、そしていくつかの論証していない考えを提供します
本文
何を書いていますか.
京東商品詳細ページ右上隅のやりとりを参考に.
どのように実現するか
カスタムヘッダの右側は簡単で、様子は「3つの点」:画像を使いましょう. 点反応しなければなりません:1つセットしましょう 点完展示メニュー:自己メンテナンス1状態 はしばらくそんなに多くて、先に書いてみます.
書き終わったら問題ないようですが、ページをスクロールすると(ページがスクロールできる場合)、メニュー項目が自分で消えないことに気づきます.
どうするんだ!
解決方法:
なぜIOSしかサポートしていないのか
実は私はこの文章を書いたときに気づいたのですが、私のこの方法はIOSしかサポートしていません(以前は別の方法を使っていました).その原因はRNがAndroid側で親要素を超えた部分を表示する内容をサポートしていないためで、cssで言えば
この方面の声も低くないので、公式の解決を期待しましょう.
Androidでの解決策の構想
HeaderRightを設定すると、メニュー項目の状態が閉パッケージで保存されます.この状態はnavigationの
この方法にも欠陥があり、ヘッダーが透明でなければメニュー項目がヘッダーで上書きされ、ヘッダーに密着してもやや見苦しい.レイアウトを簡単に変更する必要があり、面倒です.ポイント:メニュー項目のpositionはabsoluteです.
オープンソースのシナリオの使用(検証されていません)
react-native-view-overflowこれは私が探したばかりの解決策で、コンポーネントを包むことで部分を超えたコンテンツを表示する効果を達成します.
の最後の部分
ソースコードはGitHubで見ることができます.
効果図:
日常のくだらない話
前の記事では、
react-navigation
でさまざまなカスタムヘッダを作成する方法について説明しました.この水文ではheaderの右のメニュー項目をどのように実現するかを説明します.しばらくIOSだけを支持して、原因は後で説明して、そしていくつかの論証していない考えを提供します
本文
何を書いていますか.
京東商品詳細ページ右上隅のやりとりを参考に.
どのように実現するか
カスタムヘッダの右側は簡単で、
navigationOptions
のheaderRight
オプションを構成し、カスタムコンポーネントに転送すればいいです.const AppNavigator = createStackNavigator(
{
Home: {
screen: Home,
navigationOptions: {
title: ' '
}
},
GoodDetail: {
screen: GoodDetail,
navigationOptions: ({navigation}) => ({
headerTransparent: true,
headerStyle: {
borderBottomWidth: 0,
},
headerTintColor: '#313131',
shadowOpacity: 0,
headerRight:
})
}
}
)
HeaderRightはどう書きますか?分析一ハ:isMenuVisible
class HeaderRight extends Component {
constructor() {
super()
this.state = {
isMenuVisible: false
}
}
toggleMenu = () => {
this.setState((prevState) => {
isMenuVisible: !prevState.isMenuVisible
})
}
render() {
return (
{
isMenuVisible && (
)
}
)
}
}
ああ、HeaderMenu
はステータスのないコンポーネントです.つまり、メニュー項目です.スタイルは業務によって自分で書きます.書き終わったら問題ないようですが、ページをスクロールすると(ページがスクロールできる場合)、メニュー項目が自分で消えないことに気づきます.
どうするんだ!
解決方法:
HeaderMenu
の外層にViewを包み、幅は容器の幅の高さで、絶対的に位置し、スクリーン全体を満たすようにします.さらにTouchableWithoutFeedback
を外層に包み、onPress
を登録し、クリックすると非表示メニューの関数を実行するが、この関数はHeaderRight
に定義され、propsを通じてHeaderMenu
に伝達される.なぜIOSしかサポートしていないのか
実は私はこの文章を書いたときに気づいたのですが、私のこの方法はIOSしかサポートしていません(以前は別の方法を使っていました).その原因はRNがAndroid側で親要素を超えた部分を表示する内容をサポートしていないためで、cssで言えば
overflow: hidden
でhiddenにすぎない.この方面の声も低くないので、公式の解決を期待しましょう.
Androidでの解決策の構想
HeaderMenu
の部分は、対応するコンポーネントに記載される.HeaderRightを設定すると、メニュー項目の状態が閉パッケージで保存されます.この状態はnavigationの
setParams
APIをクリックするたびに指定されたページに渡される.この方法にも欠陥があり、ヘッダーが透明でなければメニュー項目がヘッダーで上書きされ、ヘッダーに密着してもやや見苦しい.レイアウトを簡単に変更する必要があり、面倒です.ポイント:メニュー項目のpositionはabsoluteです.
オープンソースのシナリオの使用(検証されていません)
react-native-view-overflowこれは私が探したばかりの解決策で、コンポーネントを包むことで部分を超えたコンテンツを表示する効果を達成します.
import ViewOverflow from 'react-native-view-overflow';
私たちのこのシナリオでは、デフォルトのヘッダコンポーネントを書き換え、パートナーは自分で試してみることができます.(リンクをなくして逃げるなんて刺激的)の最後の部分
ソースコードはGitHubで見ることができます.
効果図: