概要
前から対応していた memoir の最新化は無事リリース完了。
まとめ記事を Zenn に投稿したので詳細は以下も参照。
zenn.dev
リリース後に「画面下部のボタンとナビゲーションボタンが重なって操作できない」という問い合わせが入り、原因を特定して修正したので共有。
PR
再現方法
検証用端末では「ジェスチャーナビゲーション」を使っていたため気づけなかったが、設定から「3ボタン ナビゲーション」を ON にすると再現。

アプリ起動時に「ナビゲーションボタン」と「アプリの UI」が重なり、対象のボタンがタップできない状態になる。

原因
根本原因は Edge‑to‑Edge。
前回の記事でも触れた通り、Edge‑to‑Edge を有効にするとナビゲーションバー領域もアプリのレンダリング領域に含まれるようになるため、下部 UI と競合する。
www.wheatandcat.me
実装
「3ボタン ナビゲーション」の高さは react-native-safe-area-context の useSafeAreaInsets から bottom として取得可能。下部の固定ボタンに対して、insets.bottom を考慮した余白を与える。
■ components/layouts/Home/MemoirButton.tsx
import { useSafeAreaInsets } from "react-native-safe-area-context"; const MemoirButton: FC<Props> = (props) => { const insets = useSafeAreaInsets(); return ( <View style={[styles.root]}> <View style={{ paddingBottom: Platform.OS === "ios" ? 0 : insets.bottom - 20, // ← ここで調整 }} > <TouchableOpacity onPress={props.onPress}> <View style={[styles.memoirButton]}> <View> <Image source={require("@/assets/img/icon/main.png")} width={30} height={30} /> </View> <View> <Text>今週のmemoirを確認する</Text> </View> </View> </TouchableOpacity> </View> </View> ); };
結果
ナビゲーション設定が「3ボタン」でも「ジェスチャー」でも正しく表示されるようになった。
| 3ボタン ナビゲーション | ジェスチャーナビゲーション |
|---|---|
|
|
まとめ
Edge‑to‑Edge対応時は「3ボタン ナビゲーション」 の検証は必須!

