gpt4 book ai didi

ios - UIToolbar 不适合屏幕

转载 作者:搜寻专家 更新时间:2023-11-01 07:27:46 26 4
gpt4 key购买 nike

我做了一个自定义的键盘工具栏:

enter image description here

为此我创建了一个工具栏

let keyboardToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 44))

和横幅 View

adToolbar = GADBannerView(frame: CGRectMake(0, 44, self.view.bounds.size.width, 44))

然后我将它们分组到另一个 UIToolbar 中(我也试过 UIView)

let clusterView = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 88))
clusterView.addSubview(adToolbar)
clusterView.addSubview(keyboardToolbar)

然后我将 View 添加到 UITextField 的键盘。

一切正常,但是当我旋转设备时会发生以下情况:

clusterView UIToolbar resize correctly but not the two contained bars...(clusterView UIToolbar 正确调整大小但不是两个包含的栏...)

我试过

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
methodWhichGeneratesToolbar()
}

但都是一样的,有什么办法可以解决这个问题呢?

P.S.: I've made an example project.

最佳答案

这里有一个关于如何使用可视化格式语言 (VFL) 通过编程自动布局来实现的建议。你需要看看 the VFL docs理解 VFL 字符串语法(他们将外部 View 固定到主视图的顶部和侧面,并将两个 subview 固定在内部并相互固定,并将它们的高度设置为 44)。

我没有安装 AdMob,所以我使用了常规的 UIView 而不是横幅 View ,但希望它应该以类似的方式调整大小 - 此代码在测试应用程序的 9.2 模拟器上运行正常

let keyboardToolbar = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 44))
keyboardToolbar.translatesAutoresizingMaskIntoConstraints = false //This is critical for all programmatic autolayout - if you forget it nothing will work


let adToolbar = UIView(frame: CGRectMake(0, 44, self.view.bounds.size.width, 44))
adToolbar.translatesAutoresizingMaskIntoConstraints = false


let clusterView = UIToolbar(frame: CGRectMake(0, 0, self.view.bounds.size.width, 88))
clusterView.translatesAutoresizingMaskIntoConstraints = false

//Map views to keys used in visual format language strings
let views = ["keyboardToolbar":keyboardToolbar,"adToolbar":adToolbar,"clusterView":clusterView]

//Map values to strings used in vfl strings
let metrics = ["barHeight":44]

//In named variables to make it clear what they are
//Syntax is explained in link above
let verticalConstraintsStr = "V:|[keyboardToolbar(barHeight)][adToolbar(barHeight)]|"
let adHorizontalConstraintsStr = "|[adToolbar]|"
let keyboardHorizontalConstraintsStr = "|[keyboardToolbar]|"

let subViewConstraintStrs = [
verticalConstraintsStr,
adHorizontalConstraintsStr,
keyboardHorizontalConstraintsStr
]


//Views must be added to subviews before adding constraints
// if the superview is referenced using
//the | symbol in the VFL strings

clusterView.addSubview(keyboardToolbar)
clusterView.addSubview(adToolbar)

//Converts strings to constraints for subviews and add them

for constraintStr in subViewConstraintStrs {
let allConstraints = NSLayoutConstraint.constraintsWithVisualFormat(constraintStr, options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)
clusterView.addConstraints(allConstraints)

}

let clusterVerticalConstraintsStr = "V:|[clusterView]" //Note no | at the end - no bottom pin
let clusterHorizontalConstraintsStr = "|[clusterView]|"

view.addSubview(clusterView)

//Same process for the enclosing view

for constraintStr in [clusterVerticalConstraintsStr,clusterHorizontalConstraintsStr] {
let allConstraints = NSLayoutConstraint.constraintsWithVisualFormat(constraintStr, options: NSLayoutFormatOptions(rawValue: 0), metrics: metrics, views: views)
view.addConstraints(allConstraints)
}

VFL 功能强大但调试起来很烦人,并且不能执行所有类型的约束(例如,不对齐 - 您必须为这些使用更冗长的 API)。

关于ios - UIToolbar 不适合屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com