【问题标题】:UIView from CGRectMake does not have the right height来自 CGRectMake 的 UIView 没有正确的高度
【发布时间】:2015-09-10 19:49:15
【问题描述】:

我正在以编程方式将 UIView 添加到容器视图(但容器视图是在情节提要中创建的)。代码如下:

class ViewController: UIViewController{
    @IBOutlet weak var dwView: UIView!
    private var dwSelector = dwSelectorView()
    override func viewDidLoad(){
        super.viewDidLoad()
        addDWSelector()
    }

    func addDWSelector(){
        dwSelector.setTranslatesAutoresizingMaskIntoConstraints(false)
        dwSelector.frame = CGRectMake(self.dwView.bounds.origin.x, self.dwView.bounds.origin.y, self.dwView.bounds.width / 2.0, self.dwView.frame.height)
        println("dw height: \(self.dwView.frame.height)") 
        //prints 568, way too large of a value
        self.dwView.addSubview(dwSelector)
    }
}

故事板中dwView 的高度是123,但打印状态为568,所以现在看起来像这样:

【问题讨论】:

    标签: ios swift uiview


    【解决方案1】:

    您不应始终依赖-(void)viewDidLoad,因为此时视图边界不正确,如果您使用自动布局来设置视图框架,则不应依赖- (void)viewWillAppear。如果你在 UIViewController 中布局视图,viewDidLayoutSubviews() 是一个合适的地方,如果你在 UIView 中布局子视图,它是layoutSubviews()

    查看本文了解更多详情:Where to progmatically lay out views in iOS 5 (and handling orientation changes)

    【讨论】:

    • 我确实看到了,并将我的代码放在viewDidLayoutSubviews() 中,现在一切正常。谢谢。
    【解决方案2】:

    您是否尝试过在 viewWillAppear() 中调用 addDWSelector()?

    【讨论】:

    • 刚刚做了,同样的事情发生了
    • 我输入了viewDidLayoutSubviews(),现在可以使用了
    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多