我看到了一个类似的帖子,但并不适用于我的情况。
因此,在不同的方向上有不同的屏幕布局。 应用程序使用storyboards。为了更好地理解,我附上UI示意图的照片
正如您所见,存在TableView和Toolbar(自定义)。 工具栏包含2个标签和一个按钮。
因此,纵向模式约束条件为:
您有任何想法如何以正确的方式实现这一点吗?
这是我的解决方案,它不起作用(因为Xcode在编译时添加了一些约束)。
因此,在不同的方向上有不同的屏幕布局。 应用程序使用storyboards。为了更好地理解,我附上UI示意图的照片
![UI Sketch](https://istack.dev59.com/ytWKv.webp)
因此,纵向模式约束条件为:
- 工具栏高度为80pt
- 工具栏尾部和前导空间==0
- 从导航栏开始的TableView的顶部间距==0
- 从工具栏开始的TableView的底部间距= 0
- Tableview的宽度== Toolbar宽度
- 标签在工具栏内垂直居中,具有固定大小和固定左右距离
- 按钮在工具栏内具有固定尺寸并且居中
- 工具栏宽度80pt
- 工具栏顶部(来自导航栏)和底部间距==0
- 工具栏尾部空间==0
- 从TableView开始的引导空间==0
- Tableview的尾部空间(来自Toolbar)= 0
- Tableview的高度== Toolbar宽度
- 标签在工具栏内水平居中,具有固定大小和固定顶部和底部距离
- 按钮在工具栏内具有固定尺寸并且居中
您有任何想法如何以正确的方式实现这一点吗?
这是我的解决方案,它不起作用(因为Xcode在编译时添加了一些约束)。
// Those properties store all constraints for portrait and landscape modes
@property (nonatomic, strong) NSArray *portraitConstraints;
@property (nonatomic, strong) NSArray *landscapeConstraints;
-(void)updateViewConstraints {
[super updateViewConstraints];
BOOL layoutIsPortrait = UIDeviceOrientationIsPortrait(self.interfaceOrientation);
if (layoutIsPortrait) {
for (NSLayoutConstraint *constraint in self.landscapeConstraints)
[constraint remove];
for (NSLayoutConstraint *constraint in self.portraitConstraints)
[constraint install];
} else {
for (NSLayoutConstraint *constraint in self.portraitConstraints)
[constraint remove];
for (NSLayoutConstraint *constraint in self.landscapeConstraints)
[constraint install];
}
}
- (NSArray *)portraitConstraints {
if (!_portraitConstraints) {
UIView *mainTable = self.myTableView;
UIView *toolbar = self.toolbarView;
UIView *firstLabel = self.firstLabel;
UIView *secondLabel = self.secondLabel;
UIView *bigButton = self.bigButton;
UIView *navBar = self.navigationController.navigationBar;
NSDictionary *views = NSDictionaryOfVariableBindings(mainTable,toolbar,firstLabel,secondLabel,bigButton,navBar);
NSMutableArray *constraints = [NSMutableArray array];
[constraints addObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:[toolbar(==80)]|"
options:0
metrics:nil
views:views]];
[constraints addObjectsFromArray:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:[navBar][mainTable][toolbar]|"
options:0
metrics:nil
views:views]];
// MORE AND MORE CONSTRAINTS ADDED HERE
_portraitConstraints = constraints;
}
return _portraitConstraints;
}