c# - 通过脚本设置文本宽度组件
问题描述
我正在实例化图像上的排行榜(https://imgur.com/a/I0aVSaR),问题是,我无法正确对齐中间行的数字。
我认为如果我设置右行数字的宽度,中心行将对齐。现在右行的元素有不同的宽度。
我现在的问题是如何通过脚本设置宽度,我已经尝试过 rectransform.deltaSize、SetSizeWithCurrentAnchors 和其他类似的东西,但没有运气。
我还尝试在布局元素的检查器上设置首选宽度,但被忽略(https://imgur.com/a/O3hDeGN)。
这是创建元素的方式:
for (int i = 0; i < leaderboardEntries.Count; i++)
{
Transform newEntry = Instantiate(entryPrefab);
newEntry.SetParent(leaderboardEntriesPanel);
Text entryName = newEntry.GetChild(0).GetComponent<Text>();
Text entryScore = newEntry.GetChild(1).GetComponent<Text>();
Text entryRank = newEntry.GetChild(2).GetComponent<Text>();
entryName.text = leaderboardEntries[i].getName();
entryScore.text = leaderboardEntries[i].getScore().ToString();
entryRank.text = (i+1).ToString();
entryName.alignment = TextAnchor.UpperLeft;
entryScore.alignment = TextAnchor.UpperRight;
entryRank.alignment = TextAnchor.UpperRight;
}
中间一行是分数,左行是姓名,右行是排名。
谢谢!
解决方案
如果你想改变 RectTransform 的宽度和高度,你可以试试这个:
rectTransform.sizeDelta = new Vector2( width, height);
但是修复它们的对齐需要别的东西,首先,所有对齐应该是相同的,例如 UpperLeft 或 MiddleLeft。然后将所有条目的锚点也设置为相同的值。那么这样的事情应该可以正常工作:
// in this example I considered all anchor points are middle left and all
// alignments are middle left too
float width = leaderboardEntriesPanel.GetComponent<RectTransform>().rect.width;
for (int i = 0; i < leaderboardEntries.Count; i++)
{
Transform newEntry = Instantiate(entryPrefab);
newEntry.SetParent(leaderboardEntriesPanel);
Text entryName = newEntry.GetChild(0).GetComponent<Text>();
Text entryScore = newEntry.GetChild(1).GetComponent<Text>();
Text entryRank = newEntry.GetChild(2).GetComponent<Text>();
entryName.text = leaderboardEntries[i].getName();
entryScore.text = leaderboardEntries[i].getScore().ToString();
entryRank.text = (i+1).ToString();
entryName.GetComponent<RectTransform>().anchoredPosition = new Vector2(width / 15, entryName.GetComponent<RectTransform>().anchoredPosition.y);
entryScore.GetComponent<RectTransform>().anchoredPosition = new Vector2(width / 2, entryScore.GetComponent<RectTransform>().anchoredPosition.y);
entryRank.GetComponent<RectTransform>().anchoredPosition = new Vector2(width * 4 / 5, entryRank.GetComponent<RectTransform>().anchoredPosition.y);
}
推荐阅读
- c++ - 如何确保异步线程不使用共享资源并利用所有 CPU 内核?
- html - 为什么设置 padding:0 on给出与设置不同的结果
?
- r - R:绘图(ggplot vs autoplot)
- javascript - 输入不允许更改更改中的值
- automation - 如何将 grpcurl 与任何自动化框架一起使用?
- python - 如何生成包文档
- javascript - 将 Jquery 值传递给 thymeleaf
- c++ - 第三方库怎么能做标准库做不到的事情呢?
- npm - 通过npm在本地注册命令cli
- entity-framework-core - EF Core 5:必须是可简化节点