在ContainerView内,我有一个UITabBarController子类,在其中我已修改了UITabBar Y位置。而不是放在底部,我使用以下代码将其移到顶部附近:
override func viewDidLayoutSubviews() {
tabBar.frame = CGRect(x: 0, y: 0, width: tabBar.frame.size.width, height: tabBar.frame.size.height)
super.viewDidLayoutSubviews()
delegate = self
selectedViewController?.view.frame.origin = CGPoint(x: 0, y: tabBar.frame.size.height)
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
selectedViewController?.view.frame.origin = CGPoint(x: 0, y: tabBar.frame.size.height)
}
最初效果很好:第一个选项卡视图包含一个UITableView,并且似乎为UITabBar的新位置调整了其框架。但是,如果在推送动画进行到一半时将ViewController推送到堆栈上,则包含UITableView的视图的底部会像UITabBar一样跳到顶部。因此,视图顶部的一部分结束于UITabBar的后面,并在将新的ViewController弹出堆栈后,返回到UITabBarController时,视图(带有tableView)保持在tabBar的新位置之后的位置。我尝试过在ViewWillAppear,ViewWillDisappear,ViewDidDisappear中更改视图原点,并且这些方法都无法将视图(包含tableView)的位置重置为UITabBar的新位置。
我不确定是什么原因导致这种情况发生,或者不确定要研究哪种生命周期方法。
有什么想法或建议吗?
编辑:TableView是实际更改其Origin(而不是视图)的一个。
答案 0 :(得分:0)
似乎您可能需要将my_paths = []
for line in open(r'd:\mydata\text.txt').readlines():
my_paths.append(line.strip())
print my_paths
for dirpath, dirnames, filenames in os.walk(line):
my_paths.append(filenames)
for filename in filenames:
full_path = os.path.join(dirpath, filename)
if last_modified(full_path) < threshold:
string_output='Age :' +age_file(full_path)+'\n'+'File Size : '+file_size(full_path)+'\n'
print(string_output)
#create(string_output);
调用放在替代的顶部。你有尝试过吗?我认为超类方法实际上还会调整位置,因此您的更改可能会被覆盖。
答案 1 :(得分:0)
我通过在ViewWillAppear和ViewWillDisappear中执行此代码解决了布局问题。我无法解释为什么会这样,但我确实知道会这样。
tabBar.invalidateIntrinsicContentSize()
tabBar.superview?.setNeedsLayout()
tabBar.superview?.layoutSubviews()