2015-10-30 25 views
19

Làm cách nào để đặt chiều rộng hoặc chiều cao tối thiểu cho thành phần Gốc phản ứng?Chiều rộng/chiều cao tối thiểu trong React Native

Trong css, tôi có thể sử dụng min-width/min-height

https://facebook.github.io/react-native/docs/flexbox.html#content

Không có MinWidth/minheight trên tài liệu phản ứng bản địa

+0

Trường hợp sử dụng của bạn cho chiều rộng tối thiểu và chiều cao tối thiểu là bao nhiêu?Có lẽ bạn có thể thiết lập chiều rộng/chiều cao tự động, đảm bảo nó không bao giờ nhỏ hơn mức tối thiểu mục tiêu –

+1

Tôi muốn đặt chiều rộng tối thiểu cho nút, tôi muốn một nút có độ rộng tối thiểu ngay cả văn bản của nó rất ngắn –

Trả lời

40

minHeight, maxHeight, minWidthmaxWidth tính cũng được hỗ trợ các phản ứng bản địa phiên bản 0.29.0 cho iOSAndroid.

+0

ngoại trừ nó chỉ chấp nhận giá trị pixel. jeez, giống như chúng ta đang di chuyển về phía sau ... – AlxVallejo

0

Bạn có thể làm một cái gì đó như thế:

_getButtonStyle() { 
    var style = {height:36,padding:8} 

    if(this.props.buttonText.length < 4){ 
    style.width = 64 
    } 
    return style 
} 
0

Tôi đã có thể tìm ra giải pháp cho bạn. Đây là bản trình diễn làm việc ... https://rnplay.org/apps/vaD1iA

Và đây là các phần chính.

Trước tiên, bạn kéo trong các kích thước thiết bị ...

var Dimensions = require('Dimensions'); 
var { 
    width, 
    height 
} = Dimensions.get('window'); 

Dưới đây là các thành phần nút, trong đó sử dụng độ rộng thiết bị làm cơ sở cho các nút với

const Button = React.createClass({ 
    render(){ 
    return(
     <TouchableHighlight> 
     <Text style={[styles.button,{width: width - 20}]}> 
      {this.props.children} 
     </Text> 
     </TouchableHighlight> 
    ) 
    } 
}); 

Sau đó, khi bạn có thể thấy ở đây, chiều rộng nút sẽ giống nhau bất kể chiều rộng nội dung nhãn.

enter image description here

+0

Có vấn đề về github . Đây là một liên kết cho trạng thái mới nhất (cảnh báo spoiler: nó đã được rút lại bây giờ) https://github.com/facebook/react-native/pull/4183#issuecomment-158862314 –

0

tôi giải quyết điều này bằng cách sử dụng onLayout prop, nó rất dễ dàng:

Ví dụ:

Bước 1: Tôi tạo ra một chỗ dựa trong tiểu bang của chúng tôi sẽ tổ chức chiều cao hiện tại của hình ảnh được gọi làcurImgHeight.

constructor(){ 
    super(props); 
    this.state={curImgHeight:0} 
} 

Bước 2: Sử dụng prop trong bất kỳ View hoặc Element có hỗ trợ onLayout prop.

Ở đây tôi sử dụng nó với Image. Sau đó, tất cả những gì chúng ta phải làm là thay đổi thuộc tính trạng thái đó bất cứ khi nào chiều cao hình ảnh thực tế cao hơn chiều cao tối thiểu của chúng ta.

render(){ 
    <Image 
    source={{uri: "https://placehold.it/350x150"}} 
    resizeMode='cover' 

    style={[styles.image, {height:(this.state.curImgHeight<=0?null:this.state.curImgHeight)}]} 

    onLayout={(e)=>{ 
     let {height} = e.nativeEvent.layout; 
     let minimumImgHeight = 400; //We set the minimum height we want here. 
     if(height<= minimumImgHeight){ //Whenever the real height of the image is less than the minimum height 
     this.setState({curImgHeight:minimumImgHeight}); //just change the curImgHeight state property to the minimum height. 
     } 
    }} 
    /> 
} 

Đó là cách tôi giải quyết nó cho tôi.

p.s: Trong khi tìm kiếm, tôi nhận thấy rằng hỗ trợ không chính thức phản ứng tự nhiên minHeightmaxHeight nhưng chỉ dành cho iOS chứ không phải cho Android. Tôi sẽ không dám sử dụng chúng mặc dù. Đoạn mã trên hoạt động tốt và cho phép tôi kiểm soát.

+0

Giải pháp này nhấp nháy vì setState là không đồng bộ – ptomasroos

+0

@ptomasroos Bạn có thể biến nó thành đồng bộ hóa bằng cách sử dụng câu lệnh async/await như sau: https://gist.github.com/SudoPlz/c8b90988d02eaaf82d4da8fc407ba6a9 – SudoPlz

+0

Cảm ơn. Cuộc gọi tốt nhưng kể từ setState sẽ không được phản ánh đồng bộ hóa này sẽ nhấp nháy như trong vòng kết xuất. Vì lệnh gọi tới setState thực sự không đồng bộ trước khi hiển thị – ptomasroos

0

Bạn có thể sử dụng minHeight hoặc flexBasis - nó tương tự.

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