ActionSheet
86
投稿した質問数 2
ellipsis-vertical 클릭시
강의와 같이 실제 아이폰 actionsheet 처럼 보이지 않고 다른 style이 입혀진듯하게 보이고있습니다.
에러코드는 없습니다.
노드 : 20.19.6
시뮬레이터 : iOS 26.2
ReactNative : 0.81.5

작업중인 시뮬레이터 화면

강의 시뮬레이터 화면
import { colors } from "@/constants";
import useAuth from "@/hooks/queries/useAuth";
import type { Post } from "@/types";
import { useActionSheet } from "@expo/react-native-action-sheet";
import { Ionicons, MaterialCommunityIcons, Octicons } from "@expo/vector-icons";
import React from "react";
import { Pressable, StyleSheet, Text, View } from "react-native";
import Profile from "./Profile";
interface FeedItemProps {
post: Post;
}
function FeedItem({ post }: FeedItemProps) {
const { auth } = useAuth();
const likeUsers = post.likes?.map((like) => Number(like.userId));
const isLiked = likeUsers?.includes(Number(auth.id));
const { showActionSheetWithOptions } = useActionSheet();
const handlePressOption = () => {
const options = ["삭제", "수정", "취소"];
showActionSheetWithOptions({ options }, (selectedIndex?: number) => {
console.log("selectedIndex", selectedIndex);
switch (selectedIndex) {
case 0: //삭제
break;
case 1: //수정
break;
case 2:
break;
default:
break;
}
});
};
return (
<View style={styles.container}>
<View style={styles.contentContainer}>
<Profile
imageUri={post.author.imageUri}
nickname={post.author.nickname}
createdAt={post.createdAt}
onPress={() => {}}
option={
auth.id === post.author.id && (
<Ionicons
name="ellipsis-vertical"
size={24}
color={colors.BLACK}
onPress={handlePressOption}
/>
)
}
/>
<Text style={styles.title}>{post.title}</Text>
{/* numberOfLines 게시글 내용 3줄까지만 보이게 */}
<Text numberOfLines={3} style={styles.description}>
{post.description}
</Text>
</View>
<View style={styles.menuContainer}>
<Pressable style={styles.menu}>
<Octicons
name={isLiked ? "heart-fill" : "heart"}
size={16}
color={isLiked ? colors.ORANGE_600 : colors.BLACK}
/>
<Text style={isLiked ? styles.activeMenuText : styles.menuText}>
{post.likes.length || "좋아요"}
</Text>
</Pressable>
<Pressable style={styles.menu}>
<MaterialCommunityIcons
name="comment-processing-outline"
size={16}
color={colors.BLACK}
/>
<Text style={styles.menuText}>{post.commentCount || "댓글"}</Text>
</Pressable>
<Pressable style={styles.menu}>
<Ionicons name="eye-outline" size={16} color={colors.BLACK} />
<Text style={styles.menuText}>{post.viewCount}</Text>
</Pressable>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: colors.WHITE,
},
contentContainer: {
padding: 16,
},
menuContainer: {
flexDirection: "row",
alignItems: "center",
justifyContent: "space-around",
borderTopColor: colors.GRAY_300,
borderTopWidth: StyleSheet.hairlineWidth,
},
title: {
fontSize: 18,
color: colors.BLACK,
fontWeight: "600",
marginVertical: 8,
},
description: {
fontSize: 16,
color: colors.BLACK,
marginBottom: 14,
},
menu: {
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
paddingVertical: 16,
width: "33%",
gap: 4,
},
menuText: {
fontSize: 14,
color: colors.GRAY_700,
},
activeMenuText: {
fontWeight: "500",
color: colors.ORANGE_600,
},
});
export default FeedItem;
import queryClient from "@/api/queryClient";
import useAuth from "@/hooks/queries/useAuth";
import { ActionSheetProvider } from "@expo/react-native-action-sheet";
import { QueryClientProvider } from "@tanstack/react-query";
import { Stack } from "expo-router";
import { useEffect } from "react";
import "react-native-reanimated";
import Toast from "react-native-toast-message";
export const unstable_settings = {
anchor: "(tabs)",
};
export default function RootLayout() {
return (
<ActionSheetProvider>
<QueryClientProvider client={queryClient}>
<RootNavigator />
<Toast />
</QueryClientProvider>
</ActionSheetProvider>
);
}
function RootNavigator() {
const { auth } = useAuth();
useEffect(() => {
auth.id &&
Toast.show({
type: "success",
text1: `${auth.nickname ?? "회원"}님 환영합니다!`,
});
}, [auth.id]);
return (
<Stack>
<Stack.Screen name="(tabs)" options={{ headerShown: false }} />
<Stack.Screen name="auth" options={{ headerShown: false }} />
<Stack.Screen name="post" options={{ headerShown: false }} />
<Stack.Screen
name="modal"
options={{ presentation: "modal", title: "Modal" }}
/>
</Stack>
);
}
secureTextEntry 설정에 관해
0
58
2
expo 55 tabs 사라짐 이슈
0
82
2
백엔드도 궁금합니다!
1
85
1
댓글 버튼 하단에 고정되지 않는 이슈
0
53
1
SafeAreaView 적용 기준 문의
0
81
2
스크린 옵션 아이콘
0
55
2
[Note] 안드로이드 네비게이션 헤더 이슈 안내
0
65
2
안드로이드 폰과 PC에서 테스트할때 화면 안보임과 오류 문의
0
99
1
iOS 빌드 후 실기기에서 앱 시작
1
70
1
[5-2] 글 목록 무한스크롤 구현하기 with InfiniteQuery 10:40/ useScrollTop(ref) 사용관련
0
84
2
클라이언트 사이드에서 세션 관련 질문
0
81
2
Android 에뮬레이터 환경설정 및 실행 (for Mac) 에러 문의
0
112
1
[5-13] useLikePost 쿼리 구현 중 Tanstack Query 관련 질문
0
63
1
Expo 54 버전 ios에서 headerLeft
1
139
2
어플 개발 후 배포 시에 주의할 사항이 있을까요?
0
78
1
코드 수정 시 ios 시뮬레이터에서 자동반영이 안 되는데 왜그럴까요?
0
92
1
텍스트가 다 상단위로 올라가있는데 어떻게 해야할까요?
0
78
2
Axios Network error...
0
151
2
강의는 52버전인데 expo가 현재 54버전이에요
0
308
1
[TIP] SafeAreaView 사용할 때마다 자꾸 ios에서 위아래가 빵꾸 나시는 분들 필독
0
235
2
키보드 이슈 관련 해결 질문
0
74
1
android header를 ios처럼 바꾸기
0
70
1
CustomButton 코드 버튼 관련 질문
0
66
1
ios 시뮬로 보다가 android 시뮬로 넘어갈려니깐 오류가 생겨요
0
106
2

