NGUI动态锚点设置

最近项目上需要动态去设置控件的锚点,之前很少会碰到这样的问题,一般都是直接在预制体上设置好的,于是用VS查看了一下API 发现了UIWidget 上都是自带锚点设置的,但是我试用了 

        widget.bottomAnchor 

        widget.leftAnchor 

        widget.rightAnchor 

        widget.topAnchor 

这几个属性发现都不行 设置完成后位置还是会乱掉,然后我又试用了widget.SetAnchor()这个函数这个函数有3个重载函数,是用来设置锚点的目标对象的,于是我用widget.SetAnchor(obj,left,bottom,right,top)

试了一下,设置锚点对象和 偏移位置,发现即使是这样设置也和面板上的设置不同,面板上得设置是可以设置锚点的相对偏移位置的,而这个函数只是设置了偏移位置,没有对锚点的相对位置做设置也就是说没有如下图设置的 相对偏移目标

QQ截图20170314231151.png

继续在VS上查找NGUI的锚点API发现 ,4个方向下的锚点属性还有一个绝对位置和 相对位置可以设置

 widget.rightAnchor.absolute,widget.rightAnchor.relative

我猜想这个可能就是设置相对位置的属性但是怎么设置呢?

这是一个问题,我把这个API贴到百度上果然很多人也遇到了这样的问题仔细研究下发现还挺麻烦的,相对的距离的设置 如果为1表示是 面板设置的 bottom 或者left ,为0.5表示center,为0表示top或者right,而绝对距离则是面板上填写的数值于是,用代码设置锚点就很简单了.

  1. 首先用widget.SetAnchor()这个函数设置好锚点目标和绝对距离

  2. 然后用 widget.rightAnchor.absolute,widget.rightAnchor.relative设置好相对距离和绝对距离(这里需要再设置一遍和SetAnchor函数设置的一样)

由于我们的项目逻辑层全是lua于是我只好把这些用到的函数封装了一遍。

如下图

QQ截图20170314232702.png

希望各位同行少入点坑。。。