xamarin学习笔记B03(ios的UIView的了解)
(每次学习一点xamarin就做个学习笔记和视频来加深记忆巩固知识)
如有不正确的地方,请帮我指正。
UIView简介
它是所有视图控件的父类。例如UIButton、UILabel、UIImageView等都最终是继承自UIView。它可以添加其它视图作为它的子视图。
UIView的创建
打开VisualStudio,新建一个IOS项目后,Main.storyboard的控制器ViewController内就已经维护着一个UIView对象了,打开右边面板中的“文档大纲”选项卡就可以看到,如下图:
A.可以从工具箱中的“Windows&Bar”栏目中拖一个UIView控件到storyboard中来,如下图:
然后取名为view1,设置一个背景色,如下图:
设置了名称后就会在ViewController.designer.cs中自动生成对应的代码(不设置则不会生成),如下:
namespace B03
{
[Register ("ViewController")]
partial class ViewController
{
[Outlet]//此特性说明view1是指向界面的某一控件
[GeneratedCode ("iOS Designer", "1.0")]//说明是由iosDesigner这个工具生成
UIKit.UIView view1 { get; set; }//指向storyboard中的view1
void ReleaseDesignerOutlets ()
{ //自动生成的释放对象的相关代码
if (view1 != null) {
view1.Dispose ();
view1 = null;
}
}
}
}
还有一种方式也可生成这些代码,在Main.storyboadr上右键->打开方式->用Xcode Interface Builder这个工具打开,如下图:
再进行如下操作,如图所示:
在Main.storyboard文件中还生成了相关代XML代码,先用源代码编辑器打开它,如下图:
可以看到这个View的XML代码如下:
还有这个
<connections>
<outlet property="view1" destination="197" id="MQj-Op-W6J"/>
</connections>
表示view1指向目标是197那个id的View。
有这个view1后,就可以在代码中使用它来做操作了。
B.通过代码来创建View(这里直接在ViewController.cs),主要代码如下:
//视图加载完成后被调用
public override void ViewDidLoad()
{
base.ViewDidLoad();
UIView view2 = new UIView();
view2.Frame = new CGRect(0, 500, 100, 100);
view2.BackgroundColor = UIColor.Orange;
this.View.AddSubview(view2);
}
UIView的常用属性
例如在ViewController.cs使用。
属性 |
使用例子 |
结果说明 |
Superview |
this.View.Superview.ToString() |
UIWindow |
view1.Superview.ToString() |
this.View |
|
View2.Superview.ToString() |
this.View |
|
Subviews |
for (int i = 0; i < this.View.Subviews.Length; i++) |
view1 view2 |
Frame属性
用来设置视图的位置和大小。
在代码中这样设置view3.Frame = new CGRect(0, 500, 100, 100);
在设计面板(属性->Layout->View)中如下图:其它
关于上图最后一项:wAnyhAny installed,得先了解SizeClass。
SizeClass就是把各种大小的屏幕进行了分类,然后再配合AutoLayout布局技术去适配各种屏幕。不管是IPhone还是Ipad宽和高都分为3类,Compact(紧凑)、Regular(标准)和Any(即包含前两种),那么宽高组合起来就有9种类别(下面这个分类表是引自另一网站名叫tunnyios博主的)
1.宽任意高任意(wAhA): 任意宽高的设备
2.宽任意高标准(wAHR): 3.5 寸竖屏, 4 寸竖屏, 4.7 寸竖屏, 5.5寸竖屏, iPad 竖屏及横屏
3.宽任意高紧凑(wAhC): 3.5 寸横屏 , 4 寸横屏, 4.7 寸横屏, 5.5寸横屏
4.宽标准高任意(wRhA): 5.5 寸横屏, iPad 竖屏、 iPad 横屏
5.宽标准高标准(wRhR): iPad 竖屏、iPad 横屏
6.宽标准高紧凑(wRhC): 5.5 寸横屏
7.宽紧凑高任意(wChA): 3.5 寸竖屏、 3.5 寸横屏, 4 寸竖屏、 4 寸横屏, 4.7 寸竖屏、 4.7 寸横屏,5.5 寸竖屏
8.宽紧凑高标准(wChR): 3.5 寸竖屏, 4 寸竖屏, 4.7 寸竖屏, 5.5寸竖屏
9.宽紧凑高紧凑(wChC): 3.5 寸横屏, 4 寸横屏, 4.7 寸横屏
我简单试了下这个功能
在ViewController中下面两个方法中写入打印子视图的代码:
//视图加载完成后被调用
public override void ViewDidLoad()
{
base.ViewDidLoad();
for (int i = 0; i < this.View.Subviews.Length;i++)
Console.WriteLine(this.View.Subviews[i].ToString());
}
//视图显示出来后被调用
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
Console.WriteLine("-------ViewDidAppear---------");
for (int i = 0; i < this.View.Subviews.Length; i++)
Console.WriteLine(this.View.Subviews[i].ToString());
}
首先得选中view1。我用的iphone8plus模拟器运行。
A.我先勾选“1.宽任意高任意(wAhA)”,那么在“视图加载完成后”这个方法中就可以打印出view1的信息。
B.然后我只勾选 8.宽紧凑高标准(wChR),那么在“视图显示出来后”这个方法才可以打印出来。
C.接着我只勾选5.宽标准高标准(wRhR),两个方法都没打印了来,并且屏幕上也没显示出来。但是选择用ipad运行则显示了出来,但打印结果是在“视图显示出来后”这个方法里。
D.最后同时勾选“8.宽紧凑高标准(wChR)”和“5.宽标准高标准(wRhR)”,在iphone8 plus和ipad上都显示出了view1,打印结果都是在“视图显示出来后”这个方法里。
从而知道,视图是否会被添加到父视图以及什么时候添加到父视图,和设置的屏幕适配类别是有直接关联的。
UIView的常用方法
public virtual void AddSubview (UIView view); //添加子视图
public virtual void RemoveFromSuperview ();//将自已移除
代码和视频在我上传的****资源中 http://download.****.net/download/junshangshui/10141859