当前位置: 首页 > 知识库问答 >
问题:

React Native-TouchableOpacity不适用于位置为绝对的容器

翁鸿远
2023-03-14

我有一个动画的SafeArea视图,里面有两个按钮,视图有位置:绝对。当我点击按钮时,它会穿过它,并点击de按钮后面的元素。我目前正在使用zIndex和elevation,并尝试了许多解决堆栈溢出的方法,例如:

  • 使用TouchableHighlight
  • 使用onPressIn而不是onPress
  • 将TouchableOpity从report-nate-手势处理程序中导入,而不是从report-nate-handler中导入

如果在父容器中使用position:relative,则该按钮可以工作。

这是我的代码,按钮组件是样式化的TouchableOpacity,我还尝试移除包装,将主容器更改为TouchableOpacity而不是SafeAreaView,但没有任何结果。。。

return (
    <Wrapper
      isAndroid={Platform.OS === 'android'}
      style={{
        transform: [
          {
            translateY: translateValue.interpolate({
              inputRange: [0, 1],
              outputRange: [500, 0]
            })
          }
        ]
      }}>
      <ButtonsWrapper>
        <ActionButton
          inverted
          secondary
          onPress={() => {
            console.log('teste');
          }}
          accessible
          accessibilityLabel="Continuar com Facebook">
          <Icon name="edit" secondary size={20} />
          <BtnText bold noPadding secondary>
            Editar
          </BtnText>
        </ActionButton>
        <ActionButton
          inverted
          primary
          onPress={() => {
            console.log('teste');
          }}
          accessible
          accessibilityLabel="Continuar com Facebook">
          <Icon name="x-circle" primary size={20} />
          <BtnText bold noPadding primary>
            Encerrar
          </BtnText>
        </ActionButton>
      </ButtonsWrapper>
    </Wrapper>
  );
});

const Wrapper = Animated.createAnimatedComponent(styled.SafeAreaView`
  width: 100%;
  border-top-width: 1px;
  border-top-color: ${({ theme: { border } }) => border};
  background: ${({ theme: { background } }) => background};
  z-index: 1;
  position: absolute;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  bottom: 0;
  left: 0;
  ${({ isAndroid }) => isAndroid && 'elevation: 1'}
  height: 150px;
`);

const ButtonsWrapper = styled.View`
  flex: 1;
  align-items: center;
  justify-content: center;
  padding: 10px;
`;

const ActionButton = styled(Button)``;

const BtnText = styled(Text)`
  padding-right: 20px;
  flex: 1;
  text-align: center;

  ${({ noPadding }) =>
    noPadding &&
    `
      padding: 0px;
  `}
`;

共有1个答案

高德水
2023-03-14

我刚刚在我的应用程序中发现了问题。我只是改变了组件的顺序。警报组件放在反导航容器之前,放在按预期工作的导航容器之后。

之前:

export const App = () => (
  <>
    <StatusBar backgroundColor={theme.background} barStyle="dark-content" />
    <ThemeProvider theme={theme}>
      <Provider store={store}>
        <PersistGate loading={null} persistor={persistor}>
          <Alert />
          <Socket>
            <NavigationContainer>
              {...}
            </NavigationContainer>            
          </Socket>
        </PersistGate>
      </Provider>
    </ThemeProvider>
  </>
);
 类似资料:
  • 问题内容: 我打开控制台(chrome \ firefox)并运行以下行: 内容未包含在#popupFrame中,这使它变得很奇怪。 目标是创建像firefox这样的警告框 问题答案: 第二个div是(默认值),因此z-index不适用于它。 您需要定位(将位置属性设置为,而不是在这种情况下可能需要的其他位置)要分配给的任何内容。

  • 问题内容: 假设您将以下CSS应用于div标签 左边距和右边距无效 但是,如果您有亲戚,它可以正常工作,即 这是为什么?我只想将元素居中 有人可以解释为什么将页边距设置为绝对位置无效吗? 问题答案: 编辑:这个答案曾经声称不可能用来使绝对定位的元素居中,但这根本不是事实。因为这是最受好评和接受的答案,所以我想我只是将其更改为正确。 当您将以下CSS应用于元素时 然后为元素提供固定的宽度和高度,例如

  • 问题内容: HTML CSS 问题 文本应放在我的“表格单元”的中间。一切正常,直到我添加“ position:absolute”。现在它不能再将我的内容放在中间了吗?为什么不?它仍然知道我的身高和宽度,因为我在CSS中进行了设置。 有什么聪明的解决方法吗? 问题答案: 一切正常,直到我添加“ position:absolute”。现在它不能再将我的内容放在中间了吗?为什么不? 部队,在这里阅读第

  • 问题内容: 我在另一个div内有两个div,我想使用css将一个子div放在父div的右上角,另一个子div放在父div的底下。即,我想对两个子div使用绝对定位,但是将它们相对于父div而不是页面定位。我怎样才能做到这一点? 范例html: 问题答案: 这工作,因为手段类似“使用,,,来定位自己相对于谁拥有最近的祖先或”。 因此,我们使have 和子代都有,然后使用和定位子代。

  • 问题内容: 我有3个要素。 第一个更大(包装)并具有 第2个相对于第1个相对位置绝对定位(并包含在第1个中) 第3个包含在第2个中,并且也具有绝对定位。 为什么第3个位置相对于第2个绝对位置(这也是第1个位置的绝对位置)而不是相对位置的第一个位置? 因为3rd 是绝对定位到2nd的绝对定位。 问题答案: 因为就像重置孩子的相对位置一样。 这是无法解决的-如果您希望第三个相对于第一个绝对定位,则必须

  • 问题内容: 我正在尝试将ID为“ absPos”的div相对于其父div放在绝对位置。但它不起作用,div放置在页面的左上角。 我的代码示例如下 您能帮我解决这个问题吗?在我的实际情况下,我必须放置背景图像,而不是红色背景色。 问候 问题答案: 绝对定位的元素从其最近的祖先开始定位。在您的代码中,祖先都不是“定位”元素,因此div从body元素(即)偏移。 解决方案是将其应用于父div,这迫使它成