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 { getset; }//指向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(0500100100);
            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++)
 Console.WriteLine(this.View.Subviews[i].ToString());

view1

view2

 

Frame属性

    用来设置视图的位置和大小。

    在代码中这样设置view3.Frame = new CGRect(0500100100);

       在设计面板(属性->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 ();//将自已移除

代码和视频在我上传的CSDN资源中 http://download.csdn.net/download/junshangshui/10141859

猜你喜欢

转载自blog.csdn.net/junshangshui/article/details/78695484