我有一个带有GridLayoutGroup
的面板。
约束设置为“灵活”,因此它在行和列中都没有固定,我不希望这样。
现在,我想在代码中获取此GridLayout
的列数,然后更改单元格的大小以适合屏幕。
GridLayoutGroup layoutgroup;
我的代码中有GridLayoutGroup变量,但是没有获取其列的函数。
我该怎么做?
答案 0 :(得分:1)
您必须手动循环计数。您可以通过执行以下操作从GridLayoutGroup
组件中获取列数和行数:
1 。获取对象的第一个子对象在GridLayoutGroup
对象下的位置。该位置应来自RectTransform.anchoredPosition
,该位置返回Vector2
。
2 。从第二个子对象到GridLayoutGroup
的其他子对象中循环。
3 。在来自#2 的每个循环中,将第一个孩子的x
组件与当前循环中的x
组件进行比较
在循环外创建一个布尔变量,该布尔变量确定何时停止对行进行计数。故障值应为false
。
如果x
值匹配,则为列,因此将列增加1
,然后将布尔变量设置为true
。
如果x
的值不相同,并且布尔变量为false
,则它是行,因此将行增加1
。 / p>
基本上,当在循环中找到列时,您将停止对行进行计数或递增。这就是布尔变量的用途。
void GetColumnAndRow(GridLayoutGroup glg, out int column, out int row)
{
column = 0;
row = 0;
if (glg.transform.childCount == 0)
return;
//Column and row are now 1
column = 1;
row = 1;
//Get the first child GameObject of the GridLayoutGroup
RectTransform firstChildObj = glg.transform.
GetChild(0).GetComponent<RectTransform>();
Vector2 firstChildPos = firstChildObj.anchoredPosition;
bool stopCountingRow = false;
//Loop through the rest of the child object
for (int i = 1; i < glg.transform.childCount; i++)
{
//Get the next child
RectTransform currentChildObj = glg.transform.
GetChild(i).GetComponent<RectTransform>();
Vector2 currentChildPos = currentChildObj.anchoredPosition;
//if first child.x == otherchild.x, it is a column, ele it's a row
if (firstChildPos.x == currentChildPos.x)
{
column++;
//Stop couting row once we find column
stopCountingRow = true;
}
else
{
if (!stopCountingRow)
row++;
}
}
}
用法:
public GridLayoutGroup gridLG;
void Update()
{
int column = 0;
int row = 0;
GetColumnAndRow(gridLG, out column, out row);
Debug.Log("Column: " + column + " Row: " + row);
}
答案 1 :(得分:0)
您也可以使用子项的localPosition来做到这一点。
class DeclarationNameCustom : public DeclarationName {
std::string prefix;
public:
DeclarationNameCustom(DeclarationName& DN, std::string prefix) : prefix(prefix), DeclarationName(DN) {
}
void print(raw_ostream* OS, const PrintingPolicy& policy) const override {
std::string s;
raw_string_ostream rso(s);
DeclarationName::print(rso, policy);
std::string dummy = prefix + rso.str();
OS->write(dummy.c_str(), dummy.size());
}
};