根据里面的内容设置UIView的高度

时间:2018-06-21 19:35:18

标签: ios swift xcode overlay

我正在将OverlayView添加到Controller。除了底部约束,我已经将所有约束都设置为我的OverlayView。我在视图末尾有一个按钮。我将OverlayView的大小设置为button.frame.maxY + margin。但这不是设置正确的高度。

override func layoutSubviews() {
    sizeToFit()
    var sizeThatFits: CGSize = bounds.size
    sizeThatFits.width = UIScreen.main.bounds.size.width - popupSizeHorizontalMargin
    sizeThatFits.height = getStartedButton.frame.maxY + popupBottomMargin
    let newFrame = CGRect(x: popupOriginX, y: bounds.midY - sizeThatFits.height/2, width: sizeThatFits.width, height: sizeThatFits.height)
    frame = newFrame
}

3 个答案:

答案 0 :(得分:1)

覆盖视图或外部视图可以根据其内部元素的大小及其固有大小来计算其高度。无需为重叠视图或底部约束指定高度约束,而是将重叠视图的底部约束添加到重叠视图内的最后一个元素。这样可以满足约束条件,并且叠加层视图将根据其内容进行扩展。

只需将ctrl从您的叠加视图拖动到最后一个内部视图,然后选择“底部空间到容器”。

enter image description here

答案 1 :(得分:1)

可以根据此[内部元素为示例]

import { withMedia } from 'react-media-query-hoc'; 
import React from 'react';

class MyComponent extends React.Component {

    render(){
        if(this.props.media.tablet || this.props.media.mobile) {
            ...
            return (
                <div>
                    Mobile and Tablet View
                </div>
            )
        }

        return (
            <div>
               Other View
            </div>
        )           
    }
}

export const BaseMyComponent = MyComponent;
export default withMedia(MyComponent);

答案 2 :(得分:1)

您需要在intrinsicContentSize中覆盖UIView并返回您的自定义尺寸:

class YourCustomView: UIView {

  override var intrinsicContentSize: CGSize {
    var someYourSize = CGSize()
    // ... calculate your size
    return someYourSize
  }

}

它将使用自动布局自动将YourCustomView大小更新为您自定义的计算大小,或者当您想通过代码手动更新大小时-在invalidateIntrinsicContentSize()对象上调用YourCustomView