2015-10-27 13 views
22

Khi một ảnh có chế độ thay đổi kích thước "chứa" nó có vẻ phù hợp/biện minh cho ảnh thực ở trung tâm, nội dung hình ảnh được căn chỉnh/hợp lý khi khởi động flex.React Native - Vertical align image với resizeMode "chứa"

<Image resizeMode="contain" ...> 
<Text>Title</Text> 
</Image> 

Sau đây tôi thấy văn bản xuất hiện phía trên hình ảnh.

Có cách nào để căn chỉnh theo chiều dọc hình ảnh chứa lên trên không?

+2

Bạn đã bao giờ tìm ra điều này chưa? Bài đăng của bạn là tài liệu tham khảo duy nhất tôi đã tìm thấy trực tuyến cho vấn đề này. Cảm ơn bạn đã chia sẻ bất kỳ thông tin bổ sung nào mà bạn có. – bgolson

+0

Cùng một vấn đề với tôi. Nhưng sẽ tốt nếu tôi thay thế ** Hình ảnh ** bằng thành phần khác. Tại sao ** Hình ảnh ** thật đặc biệt? –

+0

Tôi nghĩ rằng hiệu ứng mà Kyle đang tìm kiếm đã đạt được trên web với vị trí nền thuộc tính CSS (https://developer.mozilla.org/en-US/docs/Web/CSS/background-position). Tôi cũng đang tìm cách giải quyết vấn đề này. Khi sử dụng bìa hoặc chứa, tôi không luôn muốn hình ảnh được căn giữa theo chiều dọc và chiều ngang trong chế độ xem. – SomethingOn

Trả lời

2

Bạn cần sử dụng kiểu trên Hình ảnh của mình để đặt căn chỉnh theo chiều dọc bạn muốn.

var SampleApp = React.createClass({ 
    render: function() { 
    return (
     <View style={styles.container}> 
     <Image source={{uri: "http://placekitten.com/300/505"}} style={styles.image}> 
      <Text style={styles.instructions}> 
      Hello ! 
      </Text> 
     </Image> 
     </View> 
    ); 
    } 
}); 

var styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: 'center', 
    alignItems: 'stretch', 
    backgroundColor: '#F5FCFF', 
    }, 
    image: { 
    height: 500, 
    justifyContent: "space-around", // <-- you can use "center", "flex-start", 
    resizeMode: "contain",    //  "flex-end" or "space-between" here 
    }, 
    instructions: { 
    textAlign: 'center', 
    color: 'white', 
    backgroundColor: "transparent", 
    fontSize: 25, 
    }, 
}); 

Xem https://rnplay.org/apps/9D5H1Q cho một ví dụ chạy

+1

Xin chào, cảm ơn bạn đã trả lời. Thật không may điều này không hoàn toàn giải quyết vấn đề tôi đang phải đối mặt. Tôi đã thêm một ví dụ tại https://rnplay.org/apps/9qKrYA. Lưu ý rằng ngay cả khi bắt đầu bằng flex, hình ảnh thực tế vẫn ở giữa. http://prntscr.com/8wc3cf –

+0

Bạn đang cố gắng đạt được chính xác điều gì? Bạn có thể vẽ nó trong sơn hoặc một cái gì đó? Bạn có muốn cho bạn hình ảnh trên đầu các hàng (theo chiều dọc) với không gian màu trắng bên dưới chúng không? –

3

tôi đã có thể để mô phỏng CSS backgroundPosition sử dụng đoạn mã sau:

<View style={{ overflow: 'hidden' }}> 
    <Image src={{ uri: imageURI }} style={{ height: /*adjust_as_needed*/, resizeMode: 'cover' }} /> 
</View> 

Do tràn : 'ẩn' trên Xem chiều cao của hình ảnh có thể được điều chỉnh mà không nhìn thấy chiều cao thêm của hình ảnh. Bạn sẽ cần phải sử dụng 'cover' thay vì 'contains' cho chế độ thay đổi kích thước cũng như nếu không bạn sẽ kết thúc với một hình ảnh lấy nét không rộng bằng vùng chứa Xem nếu bạn đặt chiều cao của hình ảnh quá lớn .

Trong ví dụ hàng đầu bên dưới Chiều cao hình ảnh (đường chấm màu xanh) lớn hơn ví dụ dưới cùng và do đó đường trung tâm của hình ảnh nằm thấp hơn trong chế độ xem. Bằng cách giảm chiều cao của hình ảnh (đường chấm màu xanh) trong ví dụ thứ hai, đường trung tâm của hình ảnh sẽ di chuyển lên trong chế độ xem.

Hy vọng điều này có ý nghĩa và tôi hy vọng nó hoạt động cho trường hợp sử dụng của bạn; nó đã làm cho tôi: D

enter image description here

0

Tôi cần làm điều tương tự. Cách tốt nhất tôi tìm thấy để thực hiện điều này là để cung cấp cho chiều cao hoặc chiều rộng của hình ảnh một cách rõ ràng. Sau đó, bằng cách gói hình ảnh của bạn trong một thành phần khác, bạn có thể sử dụng justifyContent để có toàn quyền kiểm soát vị trí của hình ảnh.

Đúng là bạn không phải lúc nào cũng có chiều rộng hoặc chiều cao của hình ảnh. Tuy nhiên, khá thường xuyên (đặc biệt là sử dụng resizeMode: 'contains') bạn muốn thiết lập chiều cao hoặc chiều rộng tương đối so với cái gì đó. Tôi muốn chiều cao bằng với chiều rộng của chế độ xem. Đây là giải pháp mà tôi đã sử dụng:

<View style={{ flex: 1, justifyContent: 'flex-start' }}> 
    <Image 
     source={{ uri: imagePath }} 
     resizeMode="contain" 
     style={{ height: vw(100) }} 
    /> 
</View> 

Vw là chức năng trợ giúp đến từ câu trả lời this.

0

Bạn cần sửa một số giá trị mà giá trị khác cho phép mà không được đặt. trong hầu hết các trường hợp, hãy để chiều rộng cố định. Hãy cẩn thận với phụ huynh flex tùy chọn. Nó có thể thay đổi thiết kế của bạn.

Các vấn đề liên quan