mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-20 12:45:35 +00:00
Added boat color to ui and used sail id as fallback for boat check-in representation
This commit is contained in:
@@ -12,6 +12,8 @@ import CoreData
|
||||
|
||||
extension BoatCheckIn {
|
||||
|
||||
@NSManaged public var boatID: String?
|
||||
@NSManaged public var boatID: String
|
||||
@NSManaged public var color: String
|
||||
@NSManaged public var sailID: String
|
||||
|
||||
}
|
||||
|
||||
@@ -15,7 +15,13 @@ class BoatCheckIn: CheckIn {
|
||||
override func updateWithCheckInData(checkInData: CheckInData) {
|
||||
super.updateWithCheckInData(checkInData: checkInData)
|
||||
boatID = checkInData.boatData.boatID
|
||||
color = checkInData.boatData.color
|
||||
name = checkInData.boatData.name
|
||||
sailID = checkInData.boatData.sailID
|
||||
}
|
||||
|
||||
func displayName() -> String {
|
||||
return name.count > 0 ? name : sailID
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -11,12 +11,18 @@ import Foundation
|
||||
class BoatData: BaseData {
|
||||
|
||||
fileprivate enum Keys {
|
||||
static let Color = "color"
|
||||
static let ID = "id"
|
||||
static let Name = "name"
|
||||
static let SailID = "sailId"
|
||||
}
|
||||
|
||||
var boatID: String { get { return stringValue(forKey: Keys.ID) } }
|
||||
|
||||
var color: String { get { return stringValue(forKey: Keys.Color) } }
|
||||
|
||||
var name: String { get { return stringValue(forKey: Keys.Name) } }
|
||||
|
||||
var sailID: String { get { return stringValue(forKey: Keys.SailID) } }
|
||||
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ class BoatViewController: UIViewController {
|
||||
weak var boatCoreDataManager: CoreDataManager!
|
||||
weak var boatSessionController: BoatSessionController!
|
||||
|
||||
@IBOutlet weak var boatNameView: UIView!
|
||||
@IBOutlet weak var boatNameLabel: UILabel!
|
||||
|
||||
// MARK: - Refresh
|
||||
@@ -31,7 +32,11 @@ class BoatViewController: UIViewController {
|
||||
}
|
||||
|
||||
fileprivate func refreshBoatNameLabel() {
|
||||
boatNameLabel.text = boatCheckIn.name
|
||||
boatNameLabel.text = boatCheckIn.displayName()
|
||||
if let color = UIColor.init(hexString: boatCheckIn.color) {
|
||||
boatNameView.backgroundColor = color
|
||||
boatNameLabel.textColor = UIColor.init(contrastColorFor: color)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -488,7 +488,15 @@ extension CheckInTableViewController: UITableViewDataSource {
|
||||
guard let regattaCheckInTableViewCell = cell as? CheckInTableViewCell else { return }
|
||||
regattaCheckInTableViewCell.eventLabel.text = checkIn.event.name
|
||||
regattaCheckInTableViewCell.leaderboardLabel.text = checkIn.leaderboard.name
|
||||
regattaCheckInTableViewCell.competitorLabel.text = checkIn.name
|
||||
if let boatCheckIn = checkIn as? BoatCheckIn {
|
||||
regattaCheckInTableViewCell.competitorLabel.text = boatCheckIn.displayName()
|
||||
if let color = UIColor.init(hexString: boatCheckIn.color) {
|
||||
regattaCheckInTableViewCell.competitorLabel.backgroundColor = color
|
||||
regattaCheckInTableViewCell.competitorLabel.textColor = UIColor.init(contrastColorFor: color)
|
||||
}
|
||||
} else {
|
||||
regattaCheckInTableViewCell.competitorLabel.text = checkIn.name
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-1
@@ -2,6 +2,8 @@
|
||||
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="13772" systemVersion="16G1212" minimumToolsVersion="Xcode 4.3" sourceLanguage="Swift" userDefinedModelVersionIdentifier="">
|
||||
<entity name="BoatCheckIn" representedClassName=".BoatCheckIn" parentEntity="CheckIn" syncable="YES">
|
||||
<attribute name="boatID" attributeType="String" syncable="YES"/>
|
||||
<attribute name="color" attributeType="String" syncable="YES"/>
|
||||
<attribute name="sailID" attributeType="String" syncable="YES"/>
|
||||
</entity>
|
||||
<entity name="CheckIn" representedClassName="CheckIn" elementID="Regatta" syncable="YES">
|
||||
<attribute name="isTraining" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="NO" syncable="YES"/>
|
||||
@@ -44,12 +46,12 @@
|
||||
<attribute name="markID" attributeType="String" indexed="YES" syncable="YES"/>
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="BoatCheckIn" positionX="-164" positionY="216" width="128" height="90"/>
|
||||
<element name="CheckIn" positionX="-299" positionY="6" width="128" height="135"/>
|
||||
<element name="CompetitorCheckIn" positionX="-299" positionY="215" width="128" height="163"/>
|
||||
<element name="Event" positionX="-137" positionY="-63" width="128" height="118"/>
|
||||
<element name="GPSFix" positionX="-470" positionY="0" width="128" height="133"/>
|
||||
<element name="Leaderboard" positionX="-137" positionY="69" width="128" height="73"/>
|
||||
<element name="MarkCheckIn" positionX="-434" positionY="216" width="128" height="58"/>
|
||||
<element name="BoatCheckIn" positionX="-164" positionY="216" width="128" height="58"/>
|
||||
</elements>
|
||||
</model>
|
||||
@@ -45,19 +45,54 @@ extension UIButton {
|
||||
|
||||
// MARK: - UIColor
|
||||
|
||||
extension UIColor { // Set color to RGB hex value. See http://stackoverflow.com/a/24263296
|
||||
extension UIColor {
|
||||
|
||||
// Set color to RGB hex value
|
||||
// See http://stackoverflow.com/a/24263296
|
||||
// See https://cocoacasts.com/from-hex-to-uicolor-and-back-in-swift/
|
||||
|
||||
convenience init(hex:Int) {
|
||||
convenience init(hex: Int) {
|
||||
self.init(hex: hex, alpha: 1)
|
||||
}
|
||||
|
||||
convenience init(hex:Int, alpha: CGFloat) {
|
||||
convenience init(hex: Int, alpha: CGFloat) {
|
||||
let red = CGFloat((hex >> 16) & 0xff) / 255
|
||||
let green = CGFloat((hex >> 8) & 0xff) / 255
|
||||
let blue = CGFloat(hex & 0xff) / 255
|
||||
self.init(red: red, green: green, blue: blue, alpha: alpha)
|
||||
}
|
||||
|
||||
|
||||
convenience init?(hexString: String) {
|
||||
var hexSanitized = hexString.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "")
|
||||
var rgb: UInt32 = 0
|
||||
var r: CGFloat = 0.0
|
||||
var g: CGFloat = 0.0
|
||||
var b: CGFloat = 0.0
|
||||
var a: CGFloat = 1.0
|
||||
let length = hexSanitized.count
|
||||
guard Scanner(string: hexSanitized).scanHexInt32(&rgb) else { return nil }
|
||||
if length == 6 {
|
||||
r = CGFloat((rgb & 0xFF0000) >> 16) / 255.0
|
||||
g = CGFloat((rgb & 0x00FF00) >> 8) / 255.0
|
||||
b = CGFloat(rgb & 0x0000FF) / 255.0
|
||||
} else if length == 8 {
|
||||
r = CGFloat((rgb & 0xFF000000) >> 24) / 255.0
|
||||
g = CGFloat((rgb & 0x00FF0000) >> 16) / 255.0
|
||||
b = CGFloat((rgb & 0x0000FF00) >> 8) / 255.0
|
||||
a = CGFloat(rgb & 0x000000FF) / 255.0
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
self.init(red: r, green: g, blue: b, alpha: a)
|
||||
}
|
||||
|
||||
convenience init(contrastColorFor color: UIColor) {
|
||||
var h: CGFloat = 0, s: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
|
||||
color.getHue(&h, saturation: &s, brightness: &b, alpha: &a)
|
||||
self.init(hue: h, saturation: s, brightness: 1 - b, alpha: a)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: - UIImage
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="252" text="Event Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4Xi-He-o21">
|
||||
<rect key="frame" x="20" y="8" width="128.5" height="20.5"/>
|
||||
<rect key="frame" x="20" y="8" width="100" height="20.5"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="etP-MF-gtd"/>
|
||||
</constraints>
|
||||
@@ -88,11 +88,8 @@
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Competitor Label" textAlignment="right" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sNr-Dr-sM5">
|
||||
<rect key="frame" x="156.5" y="8" width="198.5" height="64"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="100" id="tpS-bc-kNc"/>
|
||||
</constraints>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Competitor Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sNr-Dr-sM5">
|
||||
<rect key="frame" x="236.5" y="31.5" width="118.5" height="18"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -112,12 +109,13 @@
|
||||
<constraint firstItem="yqN-BN-c2a" firstAttribute="leading" secondItem="vse-xJ-e2c" secondAttribute="leading" constant="20" id="6wi-Rv-c4K"/>
|
||||
<constraint firstItem="4Xi-He-o21" firstAttribute="top" secondItem="vse-xJ-e2c" secondAttribute="top" constant="8" id="L6x-7R-n97"/>
|
||||
<constraint firstAttribute="trailing" secondItem="sNr-Dr-sM5" secondAttribute="trailing" constant="20" id="NFc-FD-zPd"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="top" secondItem="vse-xJ-e2c" secondAttribute="top" constant="8" id="QNc-rL-vcf"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="leading" secondItem="4Xi-He-o21" secondAttribute="trailing" constant="8" id="Xst-QP-CN0"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="leading" secondItem="yqN-BN-c2a" secondAttribute="trailing" constant="8" id="ZqI-Vl-jhi"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="top" relation="greaterThanOrEqual" secondItem="vse-xJ-e2c" secondAttribute="top" constant="8" id="QNc-rL-vcf"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="4Xi-He-o21" secondAttribute="trailing" constant="8" id="Xst-QP-CN0"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="yqN-BN-c2a" secondAttribute="trailing" constant="8" id="ZqI-Vl-jhi"/>
|
||||
<constraint firstItem="4Xi-He-o21" firstAttribute="leading" secondItem="vse-xJ-e2c" secondAttribute="leading" constant="20" id="g5X-ph-ew0"/>
|
||||
<constraint firstItem="yqN-BN-c2a" firstAttribute="top" secondItem="4Xi-He-o21" secondAttribute="bottom" constant="8" id="kUK-Km-5Tj"/>
|
||||
<constraint firstAttribute="bottom" secondItem="sNr-Dr-sM5" secondAttribute="bottom" constant="8" id="wMf-aW-CZl"/>
|
||||
<constraint firstItem="sNr-Dr-sM5" firstAttribute="centerY" secondItem="vse-xJ-e2c" secondAttribute="centerY" id="txY-49-SJy"/>
|
||||
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="sNr-Dr-sM5" secondAttribute="bottom" constant="8" id="wMf-aW-CZl"/>
|
||||
</constraints>
|
||||
</tableViewCellContentView>
|
||||
<color key="backgroundColor" red="0.96470588235294119" green="0.98431372549019602" blue="0.98431372549019602" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
@@ -269,7 +267,7 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="301.5"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Va6-mt-ivf" userLabel="Button View">
|
||||
<rect key="frame" x="0.0" y="51" width="375" height="200.5"/>
|
||||
<rect key="frame" x="0.0" y="50.5" width="375" height="200.5"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MzN-ph-jih">
|
||||
<rect key="frame" x="20" y="20" width="335" height="82"/>
|
||||
@@ -349,7 +347,7 @@
|
||||
<rect key="frame" x="0.0" y="301.5" width="375" height="301.5"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rd2-7J-myc">
|
||||
<rect key="frame" x="0.0" y="90" width="375" height="122"/>
|
||||
<rect key="frame" x="0.0" y="90.5" width="375" height="122"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="H8Q-vV-g5D">
|
||||
<rect key="frame" x="20" y="20" width="335" height="82"/>
|
||||
@@ -1631,13 +1629,13 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="Battery Saving Description Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uqK-uV-1FP">
|
||||
<rect key="frame" x="14" y="36" width="281" height="55"/>
|
||||
<rect key="frame" x="14" y="36" width="502" height="55"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" horizontalCompressionResistancePriority="751" verticalCompressionResistancePriority="751" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="WvA-dL-zOH">
|
||||
<rect key="frame" x="303" y="34" width="51" height="31"/>
|
||||
<rect key="frame" x="524" y="34" width="51" height="31"/>
|
||||
<connections>
|
||||
<action selector="batterySavingChanged:" destination="H1Q-9y-gn2" eventType="valueChanged" id="6fN-hp-Ux5"/>
|
||||
</connections>
|
||||
@@ -1673,7 +1671,7 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Device Identifier Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IHy-Ae-s1D">
|
||||
<rect key="frame" x="14" y="36" width="345" height="55"/>
|
||||
<rect key="frame" x="14" y="36" width="570" height="55"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleSubhead"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -1707,10 +1705,10 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="aU0-oe-2Xq">
|
||||
<rect key="frame" x="14" y="36" width="347" height="55.5"/>
|
||||
<rect key="frame" x="14" y="36" width="572" height="55.5"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="bezel" textAlignment="natural" minimumFontSize="17" clearButtonMode="always" translatesAutoresizingMaskIntoConstraints="NO" id="0Vg-eG-ZcW">
|
||||
<rect key="frame" x="0.0" y="15" width="347" height="26"/>
|
||||
<rect key="frame" x="0.0" y="15" width="572" height="26"/>
|
||||
<nil key="textColor"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<textInputTraits key="textInputTraits" returnKeyType="done"/>
|
||||
@@ -2367,20 +2365,37 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="301.5"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Boat Name Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsLetterSpacingToFitWidth="YES" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="nSs-zx-Gsu">
|
||||
<rect key="frame" x="122.5" y="140.5" width="130.5" height="20.5"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zDv-OX-OaG">
|
||||
<rect key="frame" x="118.5" y="136.5" width="138.5" height="28.5"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Boat Name Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsLetterSpacingToFitWidth="YES" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="nSs-zx-Gsu">
|
||||
<rect key="frame" x="4" y="4" width="130.5" height="20.5"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="nSs-zx-Gsu" secondAttribute="bottom" constant="4" id="CkF-oD-w50"/>
|
||||
<constraint firstItem="nSs-zx-Gsu" firstAttribute="top" secondItem="zDv-OX-OaG" secondAttribute="top" constant="4" id="FXx-cX-CtD"/>
|
||||
<constraint firstItem="nSs-zx-Gsu" firstAttribute="leading" secondItem="zDv-OX-OaG" secondAttribute="leading" constant="4" id="fHg-6c-dB1"/>
|
||||
<constraint firstAttribute="trailing" secondItem="nSs-zx-Gsu" secondAttribute="trailing" constant="4" id="uIK-Cy-D4P"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="nSs-zx-Gsu" firstAttribute="centerY" secondItem="jAl-lC-iGg" secondAttribute="centerY" id="PgM-WG-diS"/>
|
||||
<constraint firstItem="nSs-zx-Gsu" firstAttribute="centerX" secondItem="jAl-lC-iGg" secondAttribute="centerX" id="xdT-BQ-UHe"/>
|
||||
<constraint firstItem="zDv-OX-OaG" firstAttribute="centerX" secondItem="jAl-lC-iGg" secondAttribute="centerX" id="Eot-Gd-qGd"/>
|
||||
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="zDv-OX-OaG" secondAttribute="trailing" constant="16" id="FPq-mE-d8k"/>
|
||||
<constraint firstItem="zDv-OX-OaG" firstAttribute="top" relation="greaterThanOrEqual" secondItem="9T8-mk-vcr" secondAttribute="bottom" constant="8" id="IRv-0c-PUB"/>
|
||||
<constraint firstItem="zDv-OX-OaG" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="jAl-lC-iGg" secondAttribute="leading" constant="16" id="X9t-h6-7Qt"/>
|
||||
<constraint firstItem="zDv-OX-OaG" firstAttribute="centerY" secondItem="jAl-lC-iGg" secondAttribute="centerY" id="dgN-JI-Uli"/>
|
||||
<constraint firstItem="hO6-PY-Dfm" firstAttribute="top" relation="greaterThanOrEqual" secondItem="zDv-OX-OaG" secondAttribute="bottom" constant="8" id="mLZ-Mo-Jcy"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<connections>
|
||||
<outlet property="boatNameLabel" destination="nSs-zx-Gsu" id="s73-4u-RU4"/>
|
||||
<outlet property="boatNameView" destination="zDv-OX-OaG" id="Fy6-iD-n5n"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="kII-W3-hIZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
|
||||
Reference in New Issue
Block a user