Uzu*_*uto 6 uiview autolayout swift
我正在尝试在Swift中创建一个可重用的UIView,我可以将其插入到Storyboard视图控制器中.我现在的关键问题是可重用的UIView"小部件"并不完全适合故事板中的UIView框.我按照本教程设置了可重用的UIView小部件
创建了UIView的子类和相应的.xib - 并将它们连接起来:
import UIKit
class MyWidgetView: UIView {
@IBOutlet var view: UIView!;
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder);
NSBundle.mainBundle().loadNibNamed("MyWidgetView", owner: self, options: nil);
self.addSubview(self.view);
}
}
Run Code Online (Sandbox Code Playgroud)在XIB中,这是与上面代码对应的接口文件,我在模拟度量下使用了具有自由形式大小的UIView,在视图模式下使用了缩放到填充.
在主故事板中,我添加了一个UIView块(相同的矩形)并将Class更改为MyWidgetView
虽然我在XIB和主故事板中都使用了布局约束,但是我在XIB中创建的组件在实际应用程序中看起来很模糊.
查看截图.粉红色部分不应该出现,因为这只是我在测试尺寸时添加的主要故事板上的UIVIew颜色.UIView实际上是MyWidgetView(在我在第3步中更改了类之后)理论上,由于MyWidgetView ==主故事板上的UIView,以及UIView在超视图中具有使其成为矩形的约束,那么为什么我的小部件被压扁了?下面的蓝色部分应该一直向右延伸.
sou*_*thp 15
通过代码添加从代码中的nib文件加载的实际视图层次结构
self.addSubview(self.view).所以,你的框架self.view实际上与它的父母没有关系,即MyWidgetView.
您可以选择通过代码添加布局约束,也可以选择在添加为子视图后设置其框架.就个人而言,我更喜欢后者.在我的实验中,以下内容对我有用.我正在使用Xcode 6.4,我认为它与你的不一样.
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
if let nibsView = NSBundle.mainBundle().loadNibNamed("MyWidgetView", owner: self, options: nil) as? [UIView] {
let nibRoot = nibsView[0]
self.addSubview(nibRoot)
nibRoot.frame = self.bounds
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8825 次 |
| 最近记录: |